Почему retryWhen
завершается с его внутренней наблюдаемой?
Представьте, что нам нужно сделать максимум 3 попыток получения данных. И, например, ради * наша 3-я попытка определенно сработает . Поэтому я пробую следующее:
// ...
retryWhen(errors$ =>
errors$.pipe(
take(3)
)
)
Который сделает 3 попытки, но сразу же завершит после 3-й ошибки вместе со своей внутренней наблюдаемой. Даже если наша третья попытка принесла нам результаты.
Иллюстрация:
Запустить этот пример
ОБНОВЛЕНИЕ ПРИМЕЧАНИЕ: Возможно, для правильного ограничения попыток повторных попыток - нам следует использовать switchMap
для переключения на основе индекса на of(error)
или throwError(error)
.
Для меня это поведение было неожиданным: как будто внутренняя наблюдаемая будет вызывать только повторную попытку. И как только он уведомляет о повторной попытке - его работа выполнена, и нам все равно, завершится ли он.
Так что этот вопрос скорее теоретический, чем практический:
Что послужило причиной этого конкретного поведения? И в чем его преимущества?
ПРИМЕЧАНИЕ: Это не проблема, оператор ведет себя, как описано
Возвращает наблюдаемое, которое отражает источник, наблюдаемый с помощью
исключение ошибки. Если источник Observable вызывает ошибку, это
метод испускает Throwable, который вызвал ошибку в Observable
вернулся из уведомителя. Если вызовы Observable завершены или произошла ошибка
тогда этот метод вызовет завершение или ошибку на дочернем
подписка. В противном случае этот метод будет повторно подписаться на источник
Наблюдаемое.