gpt4 book ai didi

javascript - RxJS - forkJoin 何时触发?

转载 作者:行者123 更新时间:2023-12-03 04:15:45 25 4
gpt4 key购买 nike

什么会导致单个 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 的 promise 。

最佳答案

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

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

您对连接的可观察量的订阅未触发的原因很可能是因为可观察量尚未完成。您尚未在问题中包含 getToken() 的实现,但除非该 observable 完成,否则 forkJoin 既不会发出值也不会完成。

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

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

关于javascript - RxJS - forkJoin 何时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148580/

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