Angular 2 从未调用过拦截器映射
Angular 2 Interceptor map never called
我只是从 angular 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
服务中的函数永远不会被调用!
您可以按原样 return 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
:)
我只是从 angular 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
服务中的函数永远不会被调用!
您可以按原样 return 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
:)