Javascript RxJS-forkJoin何时触发?
什么会导致个人Javascript RxJS-forkJoin何时触发?,javascript,angular,rxjs,Javascript,Angular,Rxjs,什么会导致个人subscribe触发,但forkJoin不会触发 我发送了一个触发subject.subscribe的请求,但当我将其添加到数组中以与forkJoin一起使用时,forkJoin().subscribe不会运行。返回的结果是一个对象 let responses$ = []; _.map(items, (item) => { let subject = new Subject(); this.apiService.postReq
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的事情。所有的都有承诺。forkJoin
将发出一个数组,其中包含传递给它的每个观察值的最后值。当所有的观测都完成时,它发射阵列
public postRequest(url: string, data: any) {
return this.getToken().flatMap((accessToken: Response) => {
return this.post(url, data, {'Authorization': 'Bearer ' + accessToken});
});
}
因此,传递给它的每个可观察对象将需要发出至少一个值,并且还需要完成
您对联合观察对象的订阅没有触发的原因很可能是因为观察对象没有完成。您没有在问题中包括getToken()
的实现,但是除非该可观察对象完成,forkJoin
既不会发出值也不会完成
您可以通过在postRequest
实现中使用first()
来确保观察结果的完整性:
public postRequest(url:string,data:any){
返回这个。getToken()
.first()
.flatMap((accessToken:Response)=>{
返回这个.post(url,数据,{'Authorization':'Bearer'+accessToken});
});
}
谢谢。我查看了getToken()并创建了一个新的可观察对象,但没有触发onComplete()
。