2017-05-24 28 views
0

什麼會導致個人subscribe觸發,但forkJoin不觸發?RxJS - 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與承諾的東西。

回答

1

forkJoin將發出一個數組,其中包含傳遞給它的每個觀察值的最後一個值。當所有觀察結束時,它會發出數組。

因此,傳遞給它的每個observable都需要發出至少一個值,並且還需要完成。

您訂閱加入的observable不會觸發的原因很可能是因爲observables尚未完成。您尚未在問題中包含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}); 
    }); 
} 
+0

謝謝。我研究了getToken(),並且我正在創建一個新的Observable,但不觸發'onComplete()'。 – riyuyu