我的请求出现了一些奇怪的行为。如果请求抛出错误,我会自动启动第二个请求。
以下是我的请求示例:
this.http.post(environment['url'] + '/ws/verifier/documents/list', {}, {headers}).pipe(
tap((data: any) => {
....
}),
finalize(() => {
....
}),
catchError((err: any) => {
console.debug(err);
this.notify.handleErrors(err);
return of(false);
})
).subscribe();
如果出现错误,我该如何避免这个重复的请求?
谢谢
编辑:我有这个拦截器。如果抛出 401 错误,它用于刷新令牌。但如果是其他错误,请求就会重新发送。有什么解决方案可以避免这种情况吗?
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe(
catchError((err: any) => {
if (err.status === 401) {
return this.handle401Error(request, next);
}
return next.handle(request);
})
);
}
问题可能在于你调用了
next.handle(request)
两次。由于调用该函数会将请求传递给链中的下一个拦截器,因此你执行了两次链,因此请求重复了。摘自文档:你可能想要的是这个:
此外,由于您正在传递
next
给handle401Error
函数,请注意不要调用next.handle()
它,因为您可能会遇到与现在相同的问题。