Почему retryWhen оператор не переписывается на поток снова? - PullRequest
2 голосов
/ 06 мая 2019

Смотри, я создал проблему на StackBlitz https://stackblitz.com/edit/rxjs-nndpag

Я не могу понять, как правильно использовать оператор retryWhen.Я ожидаю, что он повторно подпишется на мое обещание from(getPromise()) и будет циклически повторять его, пока не будет получено желаемое значение.Мне определенно нужно использовать оператор retryWhen, поскольку я могу установить логику задержки.

В этот момент он застревает в операторе retryWhen, если обещание впервые генерирует неправильное число (см. Пример в StackBlitz).

Кажется, это связано с тем, что я использую обещание вместо наблюдаемого ввода, но я сомневаюсь, что это так.Итак, сообщество Rxjs, я рассчитываю на ваши заметки.Спасибо!

1 Ответ

0 голосов
/ 06 мая 2019

Проблема заключалась в том, что источник (объект обещания) был создан один раз, а не создавался каждый раз при возникновении ошибки. Поэтому я должен использовать пустой источник в качестве исходного источника:

const source = empty()
  .pipe(
    defaultIfEmpty(undefined)
  )

И тогда я могу переключиться на новое обещание объект с оператором switchMap:

const source = empty()
  .pipe(
    defaultIfEmpty(undefined),
    switchMap(v => getPromise())
  )

Так что следующим подпискам будут даны новые обещания. Вот правильный StackBlitz https://stackblitz.com/edit/rxjs-yrxace Теперь он работает так, как я ожидаю - он продолжается до тех пор, пока не получит правильное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...