Angular 5 - 无法解析Observable.catch()中的observable

时间:2017-12-04 19:04:42

标签: rxjs angular2-observables angular5

我第一次来这里,希望你能帮助我。

我正在尝试在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);
   });
 }
}

谢谢大家。

1 个答案:

答案 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);
});