【问题标题】:How to skip subscribe result?如何跳过订阅结果?
【发布时间】:2021-06-30 17:01:51
【问题描述】:

我有一个发送数据的流 changes$:

interface Data {
  id: number,
  prop: string
}

这个流被另一个发出 http 请求的流切换。

最后我订阅了响应:

.subscribe((response =>apply() );

如果在从最后一个请求获得响应之前向初始流发送了新数据,如何不调用 apply() 方法?

因为尽管发送了 http 请求,但数据已过时,导致源流更改$ 发出新数据。

【问题讨论】:

标签: angular rxjs rxjs6


【解决方案1】:

如果我理解正确的问题,你正在寻找的是这样的

  • 进程以changes$ 发出数据类型的值开始
  • 一旦 change$ 发出一个 Data 实例,就会触发一个 http 请求,可能使用该 Data 实例作为参数,但在这种情况下不相关
  • 一旦收到 http 请求的响应,就会执行 apply 函数,可能会将收到的响应作为参数,但这又不相关
  • 但是,如果在收到来自 http 的响应之前,change$ 发出了另一个 Data 实例,那么之前的 http 请求被取消,我们只需等待第二个请求的结果,然后再调用 apply

如果这一切都是真的,那么您正在寻找的操作员是switchMap,它确实取消了对其内部可观察对象的任何先前订阅(即在这种情况下它会取消任何运行的http请求)并随时开始新的订阅它从上游 Observable 接收到一个新的通知。

代码如下所示

change$.pipe(
   switchMap(data => fireHttpRequest(data)),
).subscribe(
   response => apply(response)
)

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多