Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在RxJs子分区数组中使用switchMap?_Javascript_Angular_Rxjs_Rxjs Observables - Fatal编程技术网

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钩子中一次取消订阅所有订阅。