Angular 如何使用角4中可观测的算子forkJoin
我需要做以下工作: 获取同一集合的用户管理员和专业人员在本例中为street“users”,我正在使用最新版本的AngularFire,这项工作可以观察到 我怎样才能同时提出两个请求,而答案是管理员和专业用户的联合体 我试着像这样使用forkJoin操作符:Angular 如何使用角4中可观测的算子forkJoin,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我需要做以下工作: 获取同一集合的用户管理员和专业人员在本例中为street“users”,我正在使用最新版本的AngularFire,这项工作可以观察到 我怎样才能同时提出两个请求,而答案是管理员和专业用户的联合体 我试着像这样使用forkJoin操作符: getUsers(): Observable<any> { return forkJoin([ this.afs.collection('users', ref => ref.where('roles.adm
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;
});
以下是我的作品:
import {Observable} from 'rxjs/Rx';
import { forkJoin } from 'rxjs/observable/forkJoin';
import 'rxjs/add/operator/map';
还有别的办法吗。
我非常感谢您的帮助尝试以下方法:
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];
});
我认为问题在于
.valueChanges()
返回a,它永远不会完成。从以下方面:
等待观测值完成,然后合并它们最后的值
发射
因此,您要寻找的可能是:
getUsers():可观察{
返回可观测的(
此.afs.collection('users',ref=>ref.where('roles.admin','=',true)).valueChanges(),
this.afs.collection('users',ref=>ref.where('roles.professional','=',true)).valueChanges()
)
.map((数据:任意)=>{
console.log(数据)
返回数据;
});
}
无论何时更新两个集合中的任何一个,都应该记录一个由两个项目组成的数组,代表这两个集合。您可以共享一个plunker吗?
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];
});
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;
});
}