在两个可观察值完成之后做点什么

时间:2019-09-12 08:08:21

标签: angular rxjs

我正在致电两项服务:

myfirstService.getCollections().subscribe(collection => myCollection = collection);

mysecondService.getCollectionId().subscribe(id => myId = id);

现在,我需要像这样从基于ID的收藏中获取商品

mycollection.find(x => x.id == myId);

这当然应该在我获得收藏和身份证后完成。

集合和ID显示在用户界面中,所以我不想在另一个内部调用,也不想等到两者都完成之后,因为我需要在交付集合和ID后立即使用它们。

在所有调用完成后,才应该获取对象。

2 个答案:

答案 0 :(得分:2)

您可以使用tap将发射的值分配给全局变量。然后同时执行两个可观察对象,并等待它们以forkJoin完成。

forkJoin(
  myfirstService.getCollections().pipe(
    tap(collection => myCollection = collection)
  ),
  mysecondService.getCollectionId().pipe(
    tap(id => myId = id)
  )
).subscribe(([collection, id]) => collection.find(x => x.id == id))

答案 1 :(得分:1)

尝试这样:

简单嵌套:

this.http.get(myfirstService.getCollections()).subscribe(x=> {
    mysecondService.getCollectionId(x.id).subscribe(details=> {
      x.details= details;
    });
});;

使用Rxjs mergeMap

res= this.http.get(myfirstService.getCollections()).pipe(
  mergeMap(x=> mysecondService.getCollectionId(x.id))
);