Я работаю над обработкой сбоя http и пытаюсь показать пользователю запрос на повторную попытку. Я сталкиваюсь с проблемой обработки ответа на обещание в задержке, когда оператор. Ниже приведен мой код
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log(request);
return next.handle(request).pipe(
timeout(15000),
retryWhen(errors => {
return errors.pipe(
delayWhen((error:any) => {
if(error.name == 'TimeoutError' || !navigator.onLine || error.status == 0 ){
return from(this.promptForRetry(error, 'Error','Request taking more time than expected, please check your connection'));
}
else
return this.handleError(error);
})
)
}),
tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
console.log(event);
}
}),
catchError((err) => {
return this.handleError(err);
})
);
}
, а вот моя функция подсказки:
async promptForRetry(error, title, msg){
let retry_subject = new Subject();
let retry = await this.alertCtrl.create({
header:title,
message: msg,
buttons: [
{
text: 'No',
handler: () => {
retry_subject.error( error );
retry_subject.complete();
retry.dismiss();
return false;
}
},
{
text: 'Retry',
handler: () => {
retry_subject.next( 1 );
retry_subject.complete();
retry.dismiss();
return false;
}
}
]
});
await retry.present();
await retry.onWillDismiss();
return retry_subject;
}
независимо от того, что я выберу повтор или нет кнопки из подсказки, он снова запрашивает.
пожалуйста помогите как обработать ответ в delaywhen