我只是从角度2 Http
迁移到HttpClient
以使用HttpInterceptor,
我的拦截器看起来像:
return next.handle(request).map(event => {
if (event instanceof HttpResponse) {
if (event.ok) {
return event.body.data;
} else {
throw new Error(event.body.statusCode);
}
}
});
在我服务的某个地方我使用httpClient:
this._httpClient.get(url).map(data => {
console.log('I never called');
return data.foo;
});
我的组件中的和subscribe
如:
this._barservice
.getFooData()
.subscribe(
foo => {
console.log(foo);
},
error => {
console.log(error);
}
);
但是服务中的map
函数永远不会被调用!
答案 0 :(得分:0)
您可以按原样返回HttpResponse
,条件if (event instanceof HttpResponse)
已经检查它是否成功请求。要捕获任何潜在错误,您应该使用catch
并检查HttpErrorResponse
:
return next.handle(request).map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
return event;
}
}).catch(err => {
if (err instanceof HttpErrorResponse) {
return Observable.throw(err)
}
})
请记住导入HttpErrorResponse
:)