我想在我的订阅数组中使用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
})
);
这带来了两个主要好处:
- 正如您所指出的,当
trigger
发出一个新值时,前一个invokeRequest
将被取消(如果它仍处于挂起状态(,并启动一个新的值 - 当您
unsubscribe()
订阅时(例如,当组件被销毁时(,如果有一些请求挂起,它也会被取消。按照以前的方式(在trigger.subscribe()
回调中调用(,它不会取消请求