在driver.ts文件中,我像这样
拨打了http电话this.http.get(GetDrivers + '?service_identifier=' + 'road_logistic' + '&page=' + '1').subscribe((response:any) => {
console.log("gio");
}, err =>{
console.log(err);
});
我还有所有HTTP调用的拦截器。在这里。
return observablePromise.pipe(mergeMap(user_tokens => {
let access_token = user_tokens ? user_tokens.access_token : null;
let clonedReq = this.addToken(request, access_token);
return next.handle(clonedReq).pipe(
tap(
evt =>{
if (evt instanceof HttpResponse) {
console.log("nice");
this.loaderService.storeLoaderOff();
}
},
error =>{
throwError("my error");
}
)})
所以问题是,我手动将驱动程序http调用作为错误。它涉及拦截器中的Tap错误处理程序,(我知道,因为console.log出现了),但是throwError不起作用。它应该做的是“我的错误”必须扔给调用方(driver.ts http调用)。正如您在驱动程序http调用中看到的那样,我捕获了错误并将其记录在控制台中。我该怎么办?
答案 0 :(得分:0)
尝试更改您的拦截器,使其使用 catchError 并生成您的自定义错误:
return observablePromise.pipe(mergeMap(user_tokens => {
let access_token = user_tokens ? user_tokens.access_token : null;
let clonedReq = this.addToken(request, access_token);
return next.handle(clonedReq).pipe(
tap(
evt =>{
if (evt instanceof HttpResponse) {
console.log("nice");
this.loaderService.storeLoaderOff();
}
}
),
catchError(error =>{ // <--- this part
throwError("my error");
})
})
希望有帮助。
答案 1 :(得分:0)
您不应该在水龙头内做错误的事情。 应该看起来像这样:
return next.handle(request).pipe(
tap(() => console.log('tap')),
catchError((error: HttpErrorResponse) => {
return throwError('my error');
}
);