代码之家  ›  专栏  ›  技术社区  ›  Abraham P

增量重试后退的代码是如何工作的?

  •  0
  • Abraham P  · 技术社区  · 6 年前
    var source = get('url').retryWhen(
       attempts =>
        attempts
          .zip(Observable.range(1, 3), (_, i) => i)
          .flatMap(i => {
            console.log('delay retry by ' + i + ' second(s)');
            return Rx.Observable.timer(i * 1000);
          });
    );
    

    资料来源: https://www.learnrxjs.io/operators/creation/range.html

    所以:retrywhen接受一个接受错误的函数,并返回一个表示何时重试的可观察值。

    Zip将n个可观测数据交错起来,而Flatmap是一个单元绑定,将一个可观测数据转换为一个新的可观测数据。我的问题是,为什么在本例中,zip采用箭头函数而不是可观察的参数作为第二个参数?下划线语法来自哪里?我想这意味着“忽略第一个论点的价值”,但它是从哪里来的呢?它作为一个论点传给 zip 所以我只能假设它是可以观察到的?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Fabricio    6 年前

    在本例中,为什么zip将arrow函数而不是observable作为第二个参数?

    它被称为投影函数,在这里您可以转换从zip收到的值。

    _ 是由 attempts 可观察,在这种情况下忽略( γ 是忽略参数的约定)。

    你基本上是这样做的:

    attemptsObservable.zip(rangeObservable, (attemptValue, rangeValue) => rangeValue)