angular - 使用 RxJS 平均 Angular 中的变量数组时遇到问题
问题描述
我有一个 Firestore 数据库,其中包含以下字段:day
, morning
, afternoon
, night
, 一天中的时间是该时间段内的数字用法。我正在尝试使用此代码来平均等值morning
,每天(sunday
,,monday
...)。
import { Subscriber, Observable, from } from 'rxjs';
import { map, filter, toArray, reduce, switchMap, groupBy } from 'rxjs/operators';
import * as _ from 'lodash';
...
groupedData: any = [];
meter:Observable<any>;
meterId: string;
ngOnInit() {
this.meter = this.db.collection('meters').doc(this.meterId).collection('data').valueChanges();
from(this.meter)
.groupBy(x => x.day)
.flatMap(group => group.toArray())
.map(g => {
return {
day: g[2].day,
morning: _.sumBy(g, 'morning'),
afternoon: _.sumBy(g, 'afternoon'),
night: _.sumBy(g, 'night'),
}
})
.toArray()
.subscribe(d => this.groupedData = d);
}
我得到了错误Property 'groupBy' does not exist on type 'Observable<any>'.
我想我正试图从早期版本的 Angular/RxJS 代码中调整它,但失败得很惨。我真的很感激任何帮助。谢谢你。
解决方案
尝试使用pipe
如下示例:
import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';
export class MyComponent {
constructor(private http: HttpClient) { }
getItems() {
this.http.get('https://example.com/api/items').pipe(map(data => {})).subscribe(result => {
console.log(result);
});
}
}
您还可以将多个运算符链接为:
getItems()
.pipe(
switchMap(users => from(users)),
mergeMap(user => forkJoin(getAddresses(user.id), getCompanies(user.id))
.pipe(map(data => ({user, addresses: data[0], companies: data[1] })))
tap(data => data.user.addresses = data.addresses),
tap(data => data.user.companies = data.companies),
map(data => data.user),
toArray()
)
)
推荐阅读
- haskell - 案例陈述中的haskell部分应用
- python - 显示对特定博客文章唯一的评论
- javascript - 我如何路由参数错误?
- microsoft-graph-api - 获取 /me/events/{id} 返回不正确的日历对象
- javascript - 如何使用来自“react-file-picker”的 FilePicker 在 React 中显示用户上传的 PDF?
- random - 从内核分布生成随机数 simulink
- android - Firebase 机器学习套件、谷歌云视觉 API 或 openCV
- python - 在用户输入的函数中是否有多个 while True 循环的替代方法?
- angular - 错误:未捕获(承诺中):无法匹配任何路由。URL 段:部署 Angular Universal SSR 应用程序时的“simplewebtool/us-central1/ssr”
- r - 在没有安装 rgdal 的情况下在 R 中解压缩和读取形状文件