如何跳过订阅结果?

How to skip subscribe result?

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

interface Data {
  id: number,
  prop: string
}

此流由另一个发出 http 请求的流切换。

最后我订阅回复:

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

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

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

如果我没看错,你要找的就是这样

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

如果这一切都是真的,那么您正在寻找的运算符是 switchMap,它会取消订阅其内部可观察对象的任何先前订阅(即,在这种情况下,它会即时取消任何 http 请求)并启动一个每当它收到来自上游 Observable 的新通知时的新订阅。

代码如下所示

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