RXJS嵌套的依赖订阅

时间:2020-02-26 19:05:35

标签: rxjs rxjs-observables

我正在尝试使用Observables来解决问题。但是我很挣扎。我已经用谷歌搜索了一段时间,但我无法真正确定我看到的示例是否可以完成我想做的事情。

我会尽力解释,以便有人可以向我解释。

我有这个http端点,在该端点上发布了JSON对象。后端将其存储,并返回具有ID的持久对象。然后根据我在这里得到的响应,我需要通过调用第二个http端点来更新对象。

假设服务1是帖子或创建对象,而服务2用于更新它。然后,我将执行以下操作:

service1.create(theNewObject).subscribe(response => {
   service2.update(response).subscribe(secondResponse => { console.log(secondResponse) })
})

我很确定这可以完成我想做的事情,但是我读过某处在另一个订阅中进行订阅不是这样做的方法。

所以我的问题是..如果我不能这样做,该怎么办?

这很难缠住我的头。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您使用所谓的高阶运算符:

import {switchMap} from 'rxjs/operators'; // import the operator

service1.create(theNewObject).pipe(
  switchMap(response => service2.update(response))
).subscribe(secondResponse => { console.log(secondResponse) })

高阶运算符通常涉及外部和内部可观察的事物。他们将从外部观察对象(在这种情况下创建)接收值,并订阅返回的内部观察对象(在这种情况下更新)并输出内部的值。

其中许多用例/行为略有不同,但是switchMap是最常见的。当处理单个发射可观测对象(例如http调用)时,它们的行为都相同。

嵌套订阅通常在rxjs中被认为是一种反模式,应避免使用它们,因为它们会使正确管理订阅变得困难或混乱,这在您深入了解rxjs时很重要。没有用例需要嵌套订阅或无法由高阶运算符处理。