0
我有angular2項目並在我有這個類:如何正確使用觀測數據,修改這個數據與其他觀察到的,它返回的可觀測
class Application {
id: number;
last_android_releasse_url: string;
last_android_releasse: Release;
last_ios_releasse_url: string;
last_ios_releasse: Release;
}
我取的所有應用程序,並加載它們|異步管道是這樣的:
this.asyncApps = this.appService.getAll(this.params)
.do((data: any) => {
this.count = data.count;
}).map(data => {
return data.apps;
});
我需要的是加載每個發行對象爲data.apps內每一個應用程序,並返回觀察到的asyncApps與異步管工作。我不確定如何問我的問題,所以我接受標題更改的提案。 所以最終代碼應該做這樣的事情:
this.asyncApps = this.appService.getAll(this.params)
.do((data: any) => {
this.count = data.count;
}).map(data => {
for (let app of data.apps) {
this.http.get(app.last_android_releasse_url).subscribe(
release_data => {
app.last_android_releasse = release_data.json().last_android_releasse;
},
error => this.alertService.showError(error.etext)
);
this.http.get(app.last_ios_releasse_url).subscribe(
release_data => {
app.last_ios_releasse = release_data.json().last_ios_releasse;
},
error => this.alertService.showError(error.etext)
);
}
return data.apps;
});
這一個工作,但我在想的東西用flatMap或forkJoin。對我來說,這似乎不是正確的解決方案。請你幫我清楚一點。
是的。這個答案幫了我很多。唯一的問題是最後應該返回數組(或異步),所以我添加了.toArray()。我也嘗試使用scan()。我希望在添加應用程序版本後立即返回結果,而不必等待所有其他應用程序版本的返回,但掃描會返回無序的結果。另外我不明白爲什麼我們需要使用.first(),因爲這個observable只返回一個結果。因此,使用.toArray()可以工作,但隨後出現問題,即如果返回所有應用程序及其版本,則加載該頁面。謝謝你的答案。 – makkasi
如果沒有.toArray()或.scan(),則編譯時錯誤爲:類型'Observable'不可分配爲鍵入'Observable '。所以似乎可觀察者一次返回一個應用程序。 –
makkasi