我必須從Angular2應用程序調用三個Web服務,並且我必須鏈接它們。他們都可以一起調用,所以我使用forkJoin。但後來,我必須使用從其中一個服務返回的ID來調用另一個服務。 用forkJoin的結果來鏈最後一個服務的正確方法是什麼?Angular中的RxJs5:鏈接不轉換數據的Observable的正確方法是什麼?
儘管我可以使用flatMap,但這最後一個服務並沒有對forkJoin中的內容進行轉換(map和flatMap被稱爲轉換運算符,只能在我們將返回的數據轉換爲某些東西時使用它們其他)。
我應該訂閱forkJoin,然後在成功的情況下再次訂閱最後一個服務(我不喜歡它)?或者我應該使用Zip(或ZipAll)運算符? 非常感謝您提前。
編輯:我會提供一個例子。 讓說我必須得到一些項目的信息,我有三個服務:
getProject(projectId)
:獲得有關項目的信息,如它的標題,持續時間......和一些特性則項目的projectPropertiesId可以有。getProperties()
:獲取比任何項目都可以擁有的所有屬性列表。getProjectProperties(propertiesId)
:獲取所選屬性的列表。 一種解決方案可能是:
this.subscriber1 = Observable.forkJoin(this.projectService.getProject(projectId), this.projectService.getProperties())
.subscribe(data => {
this.project = data[0];
this.properties = data[1];
this.subscriber2 =
this.projectService.getProperties(this.project.propertiesId)
.subscribe(selectedProperties => {
// save the selected properties...
}
});
應該不是更好,你有forkJoin後,使用郵編運算符鏈的最後一個服務調用(projectService.getProperties),而不是有內另一個用戶訂戶?
歡迎來到堆棧溢出,不幸的是,現在的答案是:這取決於。也許你可以添加一些代碼,告訴我們你做了什麼。這將是更容易弄清楚你想達到什麼。 – n00dl3
_「我必須打電話給三個網絡服務」_與_「他們兩個」_3或2? _「我必須鏈接他們」_與_「我使用forkJoin」_鏈或叉?一個例子會很有用。 – zeroflagL
我用一個例子編輯了這個問題... –