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
,所以我只能假设它是一个可观察到的?
答案 0 :(得分:2)
为什么zip在此实例中采用箭头函数而不是observable作为其第二个参数?
它被称为投影功能,您可以在其中转换从zip接收的值。
来自哪里(下划线)?
_
是attempts
observable发出的值,在这种情况下被忽略(_
是忽略参数的约定。)
你基本上是这样做的:
attemptsObservable.zip(rangeObservable, (attemptValue, rangeValue) => rangeValue)