我需要执行以下操作:
在本例中获取同一集合的用户管理员和专业人员,即街道“用户”,我正在使用最新版本的 AngularFire,这适用于该 Observables。
如何并行提出两个请求,并且答案是管理员和专业用户的联合。
我尝试像这样使用 forkJoin 运算符:
getUsers(): Observable<any> {
return forkJoin([
this.afs.collection('users', ref => ref.where('roles.admin', '==', true)).valueChanges(),
this.afs.collection('users', ref => ref.where('roles.professional', '==', true)).valueChanges()
])
.map((data: any) => {
console.log(data)
return data;
});
}
但不执行,我这样调用该方法:
this.userSrv.getUsers()
.subscribe((res) => {
console.log(res);
});
这些是我的导入:
import {Observable} from 'rxjs/Rx';
import { forkJoin } from 'rxjs/observable/forkJoin';
import 'rxjs/add/operator/map';
还有其他方法可以做到这一点吗? 感谢您的帮助
最佳答案
我认为问题在于 .valueChanges()
返回 ‘hot’ observable ,这永远不会完成
。并来自forkjoin docs :
Wait for Observables to complete and then combine last values they emitted.
所以你要找的可能是.combineLatest()
:
getUsers(): Observable<any> {
return Observable.combineLatest(
this.afs.collection('users', ref => ref.where('roles.admin', '==', true)).valueChanges(),
this.afs.collection('users', ref => ref.where('roles.professional', '==', true)).valueChanges()
)
.map((data: any) => {
console.log(data)
return data;
});
}
每当更新任一集合时,都应记录代表两个集合的两个项目的数组。
关于angular - 如何在 Angular 4 中使用 Observable 的操作符 forkJoin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49154060/