【问题标题】:RxJS operator that doesn't emit to inner observable again until its completedRxJS 运算符在完成之前不会再次发射到内部 observable
【发布时间】:2018-08-09 19:41:29
【问题描述】:

我正在寻找类似于switchMap 的运算符,但不是取消之前的内部可观察对象,而是希望它等待其内部可观察对象完成后再向其第二次发射。

一个常见的用例是用户快速单击一个按钮,通过管道传送到一个 HTTP 请求,然后将其转发以显示,如下所示:

click$.pipe(switchMap(() => this.http.get("/something"))).subscribe(res => //);

这将在用户每次单击按钮时取消 http 请求。相反,我想在内部 observable 完成之前忽略按钮单击,然后再向它发出第二次,依此类推。

是否有此用例的运算符或运算符的简单组合?谢谢!

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    检查exhaustMap。它似乎完全符合您的需求。

    exhaustMap 忽略每个新的投影 Observable 如果之前预计的 Observable 尚未完成。一旦那个 一个完成,它将接受并展平下一个投影 可观察并重复此过程。

    【讨论】:

      【解决方案2】:

      这里是一个使用exhaustMap操作符的例子。

      var clicks = Rx.Observable.fromEvent(document.querySelector("button"), 'click');
      var result = clicks.exhaustMap((ev) => {
        ev.target.setAttribute("disabled", true);
        
      return Rx.Observable.interval(5000).take(1)
        .do(() => ev.target.removeAttribute("disabled"));
        
      });
      result.subscribe(x => console.log(x));

      jsbin

      【讨论】:

        猜你喜欢
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-04
        • 2019-05-10
        相关资源
        最近更新 更多