我第一次来这里,希望你能帮助我。
我正在尝试在Angular 5上创建一个响应拦截器。我想成功处理状态为[202]的响应。
我正在调用webservice,拦截器运行良好,可以捕获错误。如果我返回Observable.throw(''),这将在subscribe上到达error函数,但是当我尝试返回一个新的Observable来解决异常时,它没有到达subscribe的成功方法。
拦截器代码:
import {Injectable} from '@angular/core';
import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor,
HttpRequest, HttpResponse} from '@angular/common/http';
import {Observable} from 'rxjs/Rx';
@Injectable()
export class Handle2xxResponseInterceptor implements HttpInterceptor{
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
return next.handle(req).catch(error => {
if (error instanceof HttpErrorResponse) {
if (error.status === 202) {
return Observable.of(error); // or return Observable.empty();
}
}
return Observable.throw(error);
});
}
}
谢谢大家。
答案 0 :(得分:3)
您无法捕获202,因为202不是http错误代码,只捕获错误。相反,只需使用法线贴图或执行操作符或更高阶的操作符(如switchMap)即可随意执行任何操作:
return next.handle(req).switchMap(response => {
if (response.status === 202) {
// process error
return Observable.empty();
}
return Observable.of(response);
});