繁体   English   中英

RxJS-forkJoin什么时候触发?

[英]RxJS - when does forkJoin trigger?

什么会导致个人subscribe触发,而forkJoin不触发?

我已经发出了触发subject.subscribe的请求,但是当我将其添加到要与forkJoin一起使用的数组中时, forkJoin().subscribe不会运行。 返回的结果是一个对象。

    let responses$ = [];
    _.map(items, (item) => {
        let subject = new Subject();
        this.apiService.postRequest("/api/my-endpoint", data).subscribe(subject);
        responses$.push(subject);
        subject.subscribe((res) => { console.log("this triggers") });
    });

    Observable.forkJoin(responses$).subscribe((res) => {
        console.log("this does not trigger");
    });

这是postRequest-我不确定我做对了吗,我想像promise一样链接它。

public postRequest(url: string, data: any) {
    return this.getToken().flatMap((accessToken: Response) => {
        return this.post(url, data, {'Authorization': 'Bearer ' + accessToken});
        });
}

坦白说,我只是想做类似的东西$q.all与承诺。

forkJoin将发出一个数组,其中包含传递给它的每个可观察对象的最后一个值。 当所有可观测值都完成时,它将发出数组。

因此,传递给它的每个可观察对象将需要发出至少一个值,并且还需要完成。

您对已加入的可观察对象的订阅未触发的原因很可能是由于可观察对象尚未完成。 您没有在问题中包含getToken()的实现,但是除非该可观察的操作完成,否则forkJoin既不会发出值也不会完成。

您可以通过在postRequest实现中使用first()来确保可观察对象完成:

public postRequest(url: string, data: any) {
  return this.getToken()
    .first()
    .flatMap((accessToken: Response) => {
      return this.post(url, data, {'Authorization': 'Bearer ' + accessToken});
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM