我已经读了很多关于这个问题的关于堆叠溢出的话题。大多数的回答都说这是CORS的问题。我不确定我的情况,所以这就是为什么我再次问这个问题,并在这里需要认真的帮助。
我正在开发一个棱角分明的应用程序,它每60秒在Android平板浏览器上点击一次API。这个应用程序运行得很好。但几个小时后,我开始发现错误:
0-Http failure response for https://theurl.com/api/: 0 Unknown Error可怕的是,它是随机发生的,有时会发生在8,9或10小时之后,有时是在我很难调试的一天之后。但是如果我重新加载这个应用程序,它就会恢复正常工作。当然,我不想每时每刻都这么做,我也想不出什么是解决问题的根本所在。
我在想在拦截器里放个逻辑。每当我得到错误状态:0,然后重新加载应用程序。但我不确定它的良好做法。
任何建议都将是非常感谢的,或者至少是一项工作。谢谢。
// Edit:当错误状态为0时,在重试5次之后,我将忽略:
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<
| HttpSentEvent
| HttpHeaderResponse
| HttpProgressEvent
| HttpResponse<any>
| HttpUserEvent<any>
| any
> {
return next.handle(request).pipe(
catchError(err => {
if (err instanceof HttpErrorResponse) {
switch (err.status) {
case 401:
return this.handle401Error(request, next);
case 0:
return this.handleUnknownError(request, next);
default:
return this.router.navigate(['system-error']);
}
} else {
return throwError(err);
}
})
);
}
}
private handleUnknownError(request: HttpRequest<any>, next: HttpHandler) {
return next.handle(request).pipe(
retryWhen(errors => {
return errors.pipe(delay(2000), take(5));
})
);
}发布于 2022-06-23 01:25:09
案例0是由您的出站请求未离开引起的。。这可能是因为CORS或某些安全策略阻止了您的请求离开,因为服务工作者截获并未能处理请求,或者因为设备的internet连接失败或暂停。
在我自己的许多项目中,我都看到了这种行为,并发现这是因为设备为了节约电力而进入待机状态或暂停连接。您可以通过启用和监视来自可观察到的(失败的internet连接)的HTTP ProgressEvents来测试设备上的internet连接是问题的事件:
这些错误的状态设置为0,error属性包含一个ProgressEvent对象,其类型可能提供进一步的信息。https://angular.io/guide/http#getting-error-details
我不知道这是否一定能回答你的问题,但我希望它能给你一个额外的调查途径。如果有帮助的话我很想听听。
https://stackoverflow.com/questions/59739254
复制相似问题