Angular5嵌套了对单个observable的observable-subscriptions

时间:2018-04-05 10:27:07

标签: angular nested observable subscription

我在服务层中有以下代码,我有两个问题:

return this.equipmentService.getEquipment(this.id) //returns subscription
  .subscribe((equipment : Equipment) =>
  {
    this.getEquipmentTags(); //returns subscription
    this.getPredictions(); //returns subscription
  });
});
  1. 在代码中,我订阅了equipmentService.getEquipment observable和 现在它返回Subscription对象 - 如何使它成为一个可观察对象 再次,可以在业务层中再次处理,例如
  2. 我怎么能意识到所有内部的observable都完成了他们的任务并触发了一个事件(或者调用一个方法或创建了另一个我可以在代码中订阅的observable)

2 个答案:

答案 0 :(得分:1)

我认为你要找的是主题。

主题可以充当Observable或Observer,因此您既可以订阅也可以调用.next()来发送事件。它们还包含有用的方法,例如complete()error(),可让您控制特定主题的状态。

以下是a useful article,涵盖了该主题的基础。

答案 1 :(得分:1)

不要太早启动订阅,因为@igor指出并且你(this.equipmentService.getEquipment(this.id)不返回订阅,它返回一个Observable,因为以其他方式你不能订阅它),使用{{1 (以及可管理的运算符)将Observables链接起来。

concatMap

然后调用它,

getChainedObservables() {
  return this.equipmentService.getEquipment(this.id)
    .pipe(
      concatMap((equipment : Equipment) => this.getEquipmentTags()),
      concatMap(() => this.getPredictions())
    );
}