如何通过将有效负载从一个传递到另一个来链接和合并两个可观察量

时间:2018-04-16 02:13:06

标签: angular rxjs observable

我有两个请求。请求A获取初始数据,然后将ID传递给请求B以获取与请求A中的实体相关联的其余数据。然后我需要通过id

合并数据集

这是我到目前为止所取得的成就,但这是一个问题

let ids;
this.getAData(filters).pipe(
  tap((aData) => (ids = aData.map(o => o.id))),
  flatMap(() => this.getBData(ids))
)
.subscribe((data: any) => {
  // was going to merge the two datasets by `ids` here
});

问题在于subscribe我只获取第二个可观察this.getBData(ids)的数据。

getAData()getBData(...)都有相同的方法签名Observable<Thing[]>

如何解决这个问题?

我正在使用6.0.0-rc.7和角度6.0.0-rc.5

1 个答案:

答案 0 :(得分:1)

您可以这样写:

this.getAData(filters)
    .pipe(
      flatMap(aData => {
        const ids = aData.map(({ id }) => id);
        const bData$ = this.getBData(ids);

        return Observable.zip(
          Rx.Observable.of(aData),
          bData$
        );          
      })
    )
    .subscribe(([aData, bData]) => {
      // Merge aData and bData
    });

注意:

  • 如果其中一个失败(使用catchError
  • ,您可能需要处理错误