此增量重试代码如何恢复工作?

时间:2018-05-28 17:50:31

标签: javascript rxjs observable

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接受一个接收错误的函数,并返回一个表示何时再次尝试的observable。

zip获取n个可观察对象并对它们进行交错,flatmap是一个Monadic绑定,将一个observable转换为一个新的observable。我的问题是,为什么zip在此实例中采用箭头函数而不是observable作为其第二个参数?下划线语法来自何处?我认为它意味着“忽略第一个参数的价值”,但它来自何处?它作为一个参数传递给zip,所以我只能假设它是一个可观察到的?

1 个答案:

答案 0 :(得分:2)

  

为什么zip在此实例中采用箭头函数而不是observable作为其第二个参数?

它被称为投影功能,您可以在其中转换从zip接收的值。

  

来自哪里(下划线)?

_attempts observable发出的值,在这种情况下被忽略(_是忽略参数的约定。)

你基本上是这样做的:

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