dan*_*l8x 12 rxjs typescript angular angular-httpclient
我在 stackoverflow 上阅读了很多有关此问题的主题。大多数答案都说这是 CORS 问题。我不确定我的情况,所以这就是为什么我再次问这个问题并在这里需要认真的帮助。
我正在开发一个 Angular 应用程序,它在 Android 平板电脑网络浏览器上每 60 秒调用一次 API。该应用程序运行得非常好。但几个小时后,我开始看到错误:
0-Http failure response for https://theurl.com/api/: 0 Unknown Error
Run Code Online (Sandbox Code Playgroud)
可怕的是它是随机发生的,有时会在 8,9 或 10 小时后发生,有时会在一天后发生,这对我来说很难调试。但如果我重新加载应用程序,它就会恢复正常工作。当然,我不想每次发生这种情况都这样做,而且我无法弄清楚解决它的根本问题是什么。
我正在考虑在拦截器中添加一个逻辑。每当我收到错误状态:0 时,然后重新加载应用程序。但我不确定这是好的做法..
任何建议都将非常感激,或者至少可以解决。谢谢。
// 编辑:当错误状态为 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));
})
);
}
Run Code Online (Sandbox Code Playgroud)
小智 1
情况0是由于您的出站请求未出发而引起的。这可能是因为 CORS 或某些安全策略阻止了您的请求离开,因为服务工作线程拦截并未能处理请求,或者因为设备的互联网连接失败或被暂停。
我在自己的许多项目中都看到过这种行为,并发现这是因为设备进入待机状态或为了省电而暂停了自己的连接。您可以通过启用并观察来自可观察的 HTTP ProgressEvents(互联网连接失败)来测试设备上的互联网连接是否存在问题:
这些错误的状态设置为 0,并且错误属性包含 ProgressEvent 对象,其类型可能提供更多信息。 https://angular.io/guide/http#getting-error-details
我不知道这是否一定能回答您的问题,但我希望它为您提供了额外的调查途径。我很想听听是否有帮助。
| 归档时间: |
|
| 查看次数: |
30049 次 |
| 最近记录: |