У меня довольно простой http-вызов. При ошибке я хочу, чтобы запрос повторился 3 раза с трехсекундной задержкой между попытками. Я разработал решение, которое близко:
return this.http.put<string>(URL,
value).retryWhen(err => {
return err
.delay(3000)
.take(3)
.concat(Observable.throw("error occurred"));
})
.catch(err => this.handleHttpError(err)) ;
Клиент повторяет попытки три раза, как я ожидал. Однако я не знаю, как вызвать окончательную ошибку таким образом, чтобы мой обработчик ошибок (который обычно ожидает аргумент HttpResponse) мог обработать ошибку.
После того, как я взял (3), как я могу получить последнюю ошибку и преобразовать ее в HttpResponse для отправки моему обработчику? Или я смотрю на это не так?
Мне нужно знать, в конце концов, HttpResponse, который сопровождал ошибку (ы). Когда я выбрасываю ошибку из retryWhen в функции concat, которая, кажется, не выполняет ее.
Бьюсь об заклад, это довольно распространенная вещь, но, будучи новичком в Angular 5 и реагируя, я думаю, что просто скучаю по лодке.