可观察数组到Observable of Array中

时间:2018-03-29 01:20:47

标签: angular rxjs

我有这段代码,我需要将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>>

3 个答案:

答案 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)

使用combineLatest运算符。看看这个函数用gif输入。

combineLatest

它的第一个数组仅在每个observable发出至少一次时发出。