[英]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.