0

我正在尝试使用 Observables 来解决问题。但我在挣扎。我已经用谷歌搜索了一段时间,但我无法确定我看到的示例是否符合我的尝试。

我会尝试解释它,所以也许有人可以向我解释。

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

假设 service1 是帖子或创建对象,而 service2 是用于更新它。然后我会做以下事情:

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

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

所以我的问题是.. 在这里做什么,如果我不能这样做?

这很难缠住我的头..

提前致谢!

4

1 回答 1

1

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

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

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

高阶运算符通常涉及外部和内部可观察对象。他们将从外部 observable 接收值(在本例中为创建)并订阅返回的内部 observable(在本例中为更新)并输出内部的值。

其中有许多用例/行为略有不同,但switchMap最常见。在处理单发射 observables(如 http 调用)时,它们的行为都相同。

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

于 2020-02-26T19:08:32.577 回答