私はリストが取り出されると、各項目が行く必要がある項目の配列の観測を返すメソッドgetList()
を持っているサービス、MyService
、は観測可能と約束
getList(): Observable<Item[]>
のようなものを持っている組み合わせMyService
,fillItem(Item)
の第2の方法により決定する。このメソッドは、約束を返すいくつかのバックエンドへの要求を発行し、のようなもの:MyServiceでは、かつてのアイテムのリストを放出する観測を返すことができるように
fillItem(item: Item) {
BackEnd.retrieveDetails(item.id)
.then(data => item.data = data);
}
は、上記の二つの方法を組み合わせることですそれらのすべてが彼らのデータで満たされています(つまり、すべての約束が解決されたら)。私がそうするならば、私は期待して私がこれまで試してみました何
は、、、
fillAll(items: Item[]) {
const promises = [];
for (let i = 0; i < items.length; i++) {
const item = items[i];
promises.push(this.fillItem(item));
}
const subject = new Subject<Item[]>();
Promise.all(promises).then(res => {
subject.next(items);
},
err => {
subject.error(err);
});
return subject.asObservable();
}
getListWithFilledItems() {
return this.getList()
.map(items => this.fillAll(items))
}
残念ながらObservable<Item[]>
Observable<Observable<Item[]>>
なく返すgetListWithFilledItems()
方法これらの線に沿って何かです。
getListWithFilledItems()
というメソッドがObservable<Item[]>
を返すようにコードを変更する方法についてのご意見はありがとうございます。私はあなただけmergeMap()
を使用することができます代わりに.map(items => this.fillAll(items))
を考える
実際に私のコードの仕事をしてくれたクイックレスポンスに感謝しています。私はまだswitchMapが動作しない間にmergeMapが動作する理由を理解するのに少しでも苦労していますが、RxとObservablesは何年も前から私が(職業的に)遭遇した最も知的に挑戦的で刺激的なものです。 – Picci