如何在RxJs子密码数组中使用switchMap



我想在我的订阅数组中使用switchMap,我想调用触发http请求的invokeRequest方法,基本上,如果触发了相同的http调用,我想取消订阅,有人能帮忙吗。

private subscriptions: Subscription[] = [];
this.subscriptions.push(trigger.pipe(skip(1)).subscribe((e) =>
this.invokeRequest(callConfig, e))
);

您可以在管道中使用switchMap,如下所示:

private subscriptions: Subscription[] = [];
this.subscriptions.push(
trigger.pipe(
skip(1),
switchMap((e) => this.invokeRequest(callConfig, e))
).subscribe(resp => {
// do something with the `invokeRequest` response
})
);

这带来了两个主要好处:

  1. 正如您所指出的,当trigger发出一个新值时,前一个invokeRequest将被取消(如果它仍处于挂起状态(,并启动一个新的值
  2. 当您unsubscribe()订阅时(例如,当组件被销毁时(,如果有一些请求挂起,它也会被取消。按照以前的方式(在trigger.subscribe()回调中调用(,它不会取消请求

最新更新