Angular 2 Interceptor map从未调用过

时间:2018-01-31 12:46:38

标签: angular httpclient interceptor

我只是从角度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函数永远不会被调用!

1 个答案:

答案 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 :)