Как работает этот код для постепенного повторного запуска? - PullRequest
0 голосов
/ 28 мая 2018
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 Ответ

0 голосов
/ 28 мая 2018

почему zip принимает в качестве второго аргумента функцию стрелки, а не наблюдаемую в качестве второго аргумента в этом случае?

Она называется функцией проекции, где вы можете преобразовать значения, полученные из zip.

откуда (подчеркивание) исходит от?

_ - это значение, излучаемое наблюдаемой attempts, в данном случае игнорируется (_ - этосоглашение об игнорируемом параметре).

Вы в основном делаете это:

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