angular - 可观察的 forkJoin 未触发

标签 angular typescript rxjs rxjs5

我正在尝试在两个 Observable 上使用 forkJoin。其中之一以流的形式开始......如果我直接订阅它们,我会收到响应,但 forkJoin 不会触发。有什么想法吗?

private data$: Observable<any[]>;
private statuses$: Observable<any[]>;
private queryStream = new Subject<string>();    

....

this.data$ = this.queryStream
    .startWith('')
     .flatMap(queryInput => {
            this.query = queryInput
            return this._companyService.getCompanies(this.queryRequired + ' ' + this.query, this.page, this.sort);
                })
            .share();
    
...

Observable.forkJoin(this.statuses$, this.companies$)
            .subscribe(res => {
                console.log('forkjoin');
                this._countStatus(res[0], res[1]);
            });


// This shows arrays in the console...

this.statuses$.subscribe(res => console.log(res));
this.companies$.subscribe(res => console.log(res));

// In the console
Array[9]
Array[6]

最佳答案

forkJoin 仅在所有内部可观察对象完成时发出。 如果您需要一个等价于 forkJoin 的工具,它只监听来自每个源的单个发射,请使用 combineLatest + take(1)

combineLatest(
  this.statuses$,
  this.companies$,
)
.pipe(
  take(1),
)
.subscribe(([statuses, companies]) => {
  console.log('forkjoin');
  this._countStatus(statuses, companies);
});

只要两个源都发出,combineLatest 就会发出,take(1) 会在之后立即取消订阅。

关于angular - 可观察的 forkJoin 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809658/

相关文章:

angular - 为什么组件中的 ', providers: [TravelService] ' 会阻止 RXJS 行为主体跨组件共享数据?

javascript - Web scraper 使用 Rx.js 遍历页面

javascript - 如何使用 Angular 中的lodash按年份过滤rowData

node.js - 如何在顶层使用参数化配置正确初始化自定义类实例?

RXJS:条件映射或合并映射

typescript - Angular2 Http with RXJS Observable TypeError : this. http.get(...).map(...).catch 不是函数

javascript - Typescript 的类型 "Property ' 上不存在错误 'IAugmentedJQuery' datepicker'

html - 如何在 Angular 应用程序中显示电子邮件,就像它在电子邮件客户端中显示一样

angular - 无法绑定(bind)到 'data',因为它不是 'p-chart' 的已知属性

angular - Material datePicker( Angular )中的多个日期选择