我有一个功能正常的HttpInterceptor。到目前为止,它的责任有限,因为我只捕获HttpErrorResponse。我希望只是忽略状态代码404,以便调用服务可以决定如何处理错误。我尝试过几种不同的方法。
如果我将if块留空,以便拦截器什么都不做,那么服务中的捕获会导致"你提供了未定义的'预期流的地方。您可以提供Observable,Promise,Array或Iterable。"错误信息。
如果我让拦截器返回Observable.of(errorResponse),请参见下文,http.get调用的catch永远不会被命中。
如果我根本没有注册拦截器,那么该服务按预期工作,但这并没有帮助,因为我将要进化这个拦截器所做的事情。
拦截
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.catch((errorResponse: HttpErrorResponse) => {
if (errorResponse.status === 404) {
return Observable.of(errorResponse);
} else if (errorResponse.status === 401) {
this.windowRef.location.href = this.windowRef.location.href;
} else {
console.error(errorResponse);
let errorMessage: string = '';
for (const error of errorResponse.error) {
errorMessage += error.message + '<br/>';
}
return Observable.throw(errorMessage || 'Server Error');
}
});
}
服务
return this.http
.get<any>(integrationsApiUrl, { withCredentials: true })
.catch((errorResponse: any) => {
if (errorResponse.status === 404) {
return Observable.throw('No setup data could be found.');
}
});