Javascript 如何在RxJs子分区数组中使用switchMap?
我想在我的订阅数组中使用Javascript 如何在RxJs子分区数组中使用switchMap?,javascript,angular,rxjs,rxjs-observables,Javascript,Angular,Rxjs,Rxjs Observables,我想在我的订阅数组中使用switchMap,我想调用触发http请求的invokeRequest方法,基本上我想取消订阅,如果触发了相同的http调用,请任何人帮助 private subscriptions: Subscription[] = []; this.subscriptions.push(trigger.pipe(skip(1)).subscribe((e) => this.invokeRequest(callConfig, e)) ); 您可以在管道中使用switchMa
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()
订阅时(例如,当组件被销毁时),如果有一些请求挂起,它也会被取消。以前的方式(在触发器.subscribe()
回调中调用)不会取消请求同意!我还要为
Subscription
:private subscriptions:Subscription=newsubscription()标记更好的实践
然后只需使用this.subscriptions.add(…
),方法相同。它只允许您在OnDestroy钩子中一次取消订阅所有订阅。