我尝试使用拦截器来处理http错误,并重试特殊的错误状态,在我的情况下,状态代码为502。
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
retryWhen(errors => {
return errors
.pipe(
mergeMap(error => (error.status === 502) ? throwError(error) : of(error)),
take(2)
)
})
)
}
字符串
但是它不工作,而当我以这种方式使用retry()
时,它工作得很好
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
retry(2),
catchError((error: HttpErrorResponse) => {
return throwError(error);
})
)
}
型
3条答案
按热度按时间wfypjpf41#
我采用了你的方法,并扩大了一点,出于自己的利益。
第一个是创建一种自定义操作符:
字符串
然后,您可以根据此操作符构造拦截器,如下所示:
型
你可以看到它的工作in this blitz
mzaanser2#
试试下面的代码。你应该反过来做。
字符串
0kjbasz63#
我试图使用Jota的响应,但
retryWhen
现在已被弃用。所以我使用retry
修改了他的响应。这就是我得到的:
字符串