gpt4 book ai didi

angular - 如何在 Angular 4 中使用 Observable 的运算符 forkJoin

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:07 24 4
gpt4 key购买 nike

我需要做以下事情:

在这个案例中获取同一集合的用户管理员和专业人员“用户”,我正在使用最新版本的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com