如何跳过订阅结果?
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)
)
我有一个发出数据的流 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)
)