Я использую концепцию метода backoff , чтобы повторить запрос, если произошла внутренняя ошибка сервера.Я имею в виду не 401
, 403
или подобное.Моя цель - повторить запрос, если сервер не отвечает и / или отправка ответа занимает слишком много времени, например, в случае статуса pending
.И я определил предельное время ожидания для этого (в службе).
Моя проблема заключается в том, что функция retryWhen
вызывается во всех случаях / ошибках, включая 401
.
Я считаю, что мне, возможно, придется реструктурировать свою функцию / код, чтобы она заработала.Я борюсь с этим, но просто не могу заставить его работать так, как ожидалось.
Функция retryWhen
возвращает наблюдаемый поток, который указывает, когда следует повторить попытку, и поэтому может 'в моем коде не работает должным образом.
public userLogin(userName, userPass: string) {
this.theService.login(userName, userPass)
.retryWhen(attempts => Observable.range(1, 3)
.zip(attempts, i => i)
.mergeMap(i => {
console.log("delay retry by " + i + " second(s)");
// Show a message to user to wait
if ( i === 3 ) {
// Show Server doesn't respond... try later
}
return Observable.timer(i * 3000);
})
).subscribe(
res => {
// handle and show response result
},
err => {
console.log(err);
if ( err === 401 ) {
// handle 401 error
} else {
// handle other error
}
}
);
}
Следующий вопрос также является своего рода решением той же проблемы, и я попытался использовать подсказку относительно mergeMap(error => {...})
, ноэто не сработало для меня.
Любая идея, пожалуйста, как мне реструктурировать мой код, чтобы повторить запрос на случай внутренней ошибки сервера или чего-то вроде?как я уже говорил, нет 401
, 403
или аналогичные.