什么会导致个别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 - 我不确定我做得对,我想把它像承诺一样链接。
public postRequest(url: string, data: any) {
return this.getToken().flatMap((accessToken: Response) => {
return this.post(url, data, {'Authorization': 'Bearer ' + accessToken});
});
}
坦率地说,我只想做一些与承诺相似的$q.all
。
答案 0 :(得分:1)
forkJoin
将发出一个数组,其中包含传递给它的每个observable的最后一个值。当所有可观察量都已完成时,它会发出数组。
因此传递给它的每个observable都需要发出至少一个值,并且还需要完成。
您订阅加入的observable的原因不会触发的原因很可能是因为observable没有完成。您没有在问题中包含getToken()
的实现,但除非该可观察结果完成,否则forkJoin
既不会发出值也不会完成。
您可以在first()
实施中使用postRequest
来确保观察对象完整:
public postRequest(url: string, data: any) {
return this.getToken()
.first()
.flatMap((accessToken: Response) => {
return this.post(url, data, {'Authorization': 'Bearer ' + accessToken});
});
}