angular - 如何在 Angular 4 中使用 Observable 的操作符 forkJoin

标签 angular typescript rxjs observable

我需要执行以下操作:

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

相关文章:

深层嵌套数组的 TypeScript 接口(interface)

angular - TypeError : You provided an invalid object where a stream was expected. 您可以提供一个 Observable、Promise、Array 或 Iterable

http - Angular2 可观察的

c# - 从 C# 创建 Angular build(ng build)

html - Angular Flex 是否可以有多个粘性列?

node.js - 使用 pm2 的 Typescript Node 应用程序部署过程

javascript - 更改方法以在 typescript 中使用 Promise.all

angular - 别名已被 “--collection” 选项使用,不能被 “--change-detection” 选项使用

angular - 更改动态描述元标记可以用 Angular 8 中的搜索引擎检测到

javascript - 如何在 Rxjs 中对不完整序列进行 Observable 计数