Чтобы сделать экспоненциальную повторную попытку, вам нужно использовать retryWhen
.Вот пример:
// will retry with
// 0, 10, 40, 90, 160 ms delays
retryWhen(error$ =>
error$.pipe(
delayWhen((_, i) => timer(i * i * 10))
)
)
![exponential backoff](https://i.stack.imgur.com/woTkm.png)
Попробуйте этот код на детской площадке
В вашем примере вы повторяете timer
вместо повтор from(connectSocket())
.Поэтому замените catchError
на retryWhen
, чтобы получить то, что вам нужно.
Надеюсь, это поможет
-
Кроме того, существуют сторонние инструменты для добавления экспоненциального отката.Например,
https://github.com/alex-okrushko/backoff-rxjs
См. мою статью "Обработка ошибок в RxJS" , чтобы лучше понять ошибки и повторы в RxJS.