我需要做以下事情:
在此案例街道"用户"中获取相同集合的用户管理员和专业人员,我正在使用最新版本的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';
还有其他方法可以做到这一点。 我很感激你的帮助
答案 0 :(得分:1)
我认为问题在于.valueChanges()
会返回‘hot’ observable,而complete
永远不会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;
});
}
。并从forkjoin docs:
等待Observables完成,然后将它们组合起来 射出。
所以你要找的可能是.combineLatest()
:
distrib(i) = round(cumprobab(i)*255);
每当更新任何一个集合时,这应该记录一个表示两个集合的两个项目的数组。
答案 1 :(得分:0)
尝试类似:
let url1 = this.http.get('https://url1');
let url2 = this.http.get('http://url2');
forkJoin([url1, url2]).subscribe(results => {
// results[0] is url1 response
// results[1] is url2 response
this.url1reponse = results[1];
this.url2reponse = results[0];
});