【问题标题】:How to cancel async action with rxjs?如何使用 rxjs 取消异步操作?
【发布时间】:2019-01-11 16:16:39
【问题描述】:

我想通过按钮 Async increment 触发异步操作,但通过单击按钮 cancel 取消它。

我的racerxjs 代码不起作用。

有什么方法可以实现吗?

https://codesandbox.io/s/zk5oy3zj7x

【问题讨论】:

    标签: rxjs cancellation


    【解决方案1】:

    欢迎。

    switchMap 如果在前一个请求完成之前有新请求到来,则取消前一个请求(完成前一个内部 observable)。 如果你想用一个新的流取消请求,你可以将你的流与“action one”合并,让 switchMap 来决定做什么。

    merge(
      increment$.pipe(mapTo(true)),
      cancelIncrement$.pipe(mapTo(false))
    ).pipe(
      switchMap((run) => new Promise(resolve => {
        if(run) 
          setTimeout(() => resolve(2), 2000);
      }))
    ).subscribe(console.log);
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多