【发布时间】:2020-01-16 13:27:41
【问题描述】:
我是 RXJS 的新手,但遇到了问题。我有几个 HTTP 调用,并希望有一个全局 http 错误拦截器。基本上,我试图捕捉所有错误响应,其中Content-Type 是"problem+json"。到目前为止,这是我尝试过的:
error.interceptor.ts
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
tap(f => f, errorResponse => {
const {headers} = errorResponse;
if (errorResponse instanceof HttpErrorResponse && headers.get('Content-Type').includes('application/problem+json')) {
this.messageService.error(errorResponse.error.title, errorResponse.error.message);
}
return throwError(errorResponse);
})
);
}
login.component.ts
submitForm(): void {
const loginRequest: LoginRequest = new LoginRequest(this.loginForm.value);
this.http.request(Resource.AUTH, Request.POST, loginRequest)
.subscribe((next) => {
this.router.navigate(['/home']);
}, (error) => {
console.log(error);
});
}
我真正的问题是,应该从错误拦截器调用 messageService,console.log 在错误回调中执行,但不知何故,成功回调也被执行,尽管状态码是 401。
我在这里做错了什么?提前致谢。
编辑:
我刚刚删除了拦截器,检查了成功和错误回调是否都执行了,结果是yes。
【问题讨论】: