【问题标题】:How to use switchMap in RxJs Subsciption array?如何在 RxJs Subsciption 数组中使用 switchMap?
【发布时间】:2021-05-06 14:08:18
【问题描述】:

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

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

【问题讨论】:

    标签: javascript angular rxjs rxjs-observables


    【解决方案1】:

    您可以在管道中使用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() 回调中调用)不会取消请求。

    【讨论】:

    • 同意!我还要为Subscription 标记更好的做法:private subscriptions: Subscription = new Subscription();,然后以同样的方式使用this.subscriptions.add(...。它只允许您一次取消订阅 OnDestroy 挂钩中的所有订阅。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多