Вас смущает ожидаемое поведение повтора.
С оператором retry
он не будет пересылать ошибки вашему обработчику ошибок, пока не будут исчерпаны все попытки повторения. Так что это повторная попытка, просто ваши ожидания не соответствуют тому, как будут регистрироваться ошибки. Если вы хотите регистрировать ошибки по мере их возникновения до повторных попыток, вам необходимо использовать tap
для создания побочного эффекта до retry
:
source$.pipe(
tap({ error: err => console.log('error: ', err.message) }),
retry(5),
)
.subscribe({
next: value => console.log(value),
error: err => console.log('only fires once ', err.message),
});
Не связано:Вы делаете что-то странное с async / await.
Кроме того, await source$.subscribe()
не имеет смысла, потому что при этом ваша функция просто вернет Promise<Subscription>
. subscribe
не возвращает Promise
. Возможно, вы ищете Observable.prototype.forEach()
, однако, предупреждаем, с помощью которого можно отказаться от отмены, поскольку он не возвращает Subscription
для отказа от подписки.
Я бы рекомендовал не использовать async
/await
в данном случае.
Надеюсь, это поможет.