我有这段代码,我需要将Observable
的数组更改为数组的Observable
:
this.output = this.firsProvider.getIds(uid) // return array of Ids : String[]
.flatMap(obs$ => obs$)
.map((id: string) => this.secondProvider.getOneItem(id) // return an Observable of Item
);
我想将所有项目的Observable合并到一个可观察的所有项目中。我的代码只返回输出:Observable < Observable < Item>>
。
答案 0 :(得分:-1)
我认为你应该考虑使用这样的语法。您可以并行请求项目,并在单个可观察数组的数组上使用forkJoin
等待所有项目完成。此代码将以String[]
开头,并生成Observable<Item[]>
。
const itemObservables = this.firstProvider.getIds(uid)
.map(id => this.secondProvider.getOneItem(id));
this.output = Observable.forkJoin(itemObservables);
答案 1 :(得分:-1)
这将返回一个包含一系列项目的observable:
const itemsArray$ = this.firstProvider.getIds(uid)
// return array of observable item
.map(idArray => this.secondProvider.getOneItem(id)),
.mergeMap(observableItemArray => {
// zip will return an array of items
return Observable.zip(observableItemArray)
});
之后,如果您想要一个项目流,请使用from observable,如下所示:
const items$ = itemsArray$.mergeMap(itemArray => {
return Observable.from(itemArray);
});
答案 2 :(得分:-1)