首页 > 解决方案 > 如何处理 rxjs 帖子引发的错误

问题描述

从我的后端服务,我正在发送一条post消息

return this.http.post(/*this.API_URL +*/this.NEW_QUESTION_URL,body,httpOptions)
      .map(response => { 
          return result; //map isn't required
        }

      })
      .catch(this.handleError); //error handler if Observable fails

handleError,我抛出一个错误

private handleError (error: HttpErrorResponse) {
console.error('WebToBackendInterfaceService::handleError', error);//I SEE THIS PRINT
        let result:ServerResponseAPI = {result:"error", "additional-info":error.message};
    return throwError(result);     
  }

我的问题 - 我想throwError返回一个Observable. 我如何以及在哪里订阅这个 Observable 以便我可以处理错误?

我想Observable返回的 bypost与 from 的不同throwError。我已经订阅了Observableof post

我也有一个自定义拦截器。

return next.handle(cloned)
 .pipe(tap((ev: HttpEvent<any>) => { 
        console.log("got an event",ev);
        if (ev.type === HttpEventType.Response) {
          console.log('event of type Http response');
        }  else if (ev.type === HttpEventType.Sent) {
          console.log(" event of type httpsent");
        } else if(ev.type === HttpEventType.DownloadProgress){
          console.log("event of type download progress");
        } else if (ev.type === HttpEventType.UploadProgress) {
          console.log("event of type upload progress");
        } else if (ev.type === HttpEventType.User) {
          console.log("event of type user progress");
        }else if (ev.type === HttpEventType.ResponseHeader) {
          console.log("event of type response header")
        } else {
          console.log("don't know type",ev.type);
        }
      })
      ,catchError(errorResponse => {
          console.log("caught error from server",errorResponse) //I SEE THIS PRINT
          return observableThrowError(errorResponse);
      }));
    }

标签: rxjs6

解决方案


啊!我认为基本的 Rxjs 东西。在订阅 observable 时,我可以为数据、错误和完成提供处理程序。我只为数据提供了处理程序。

let subscription = this.dataService.addData(this.data)
    .subscribe((data) => {
            console.log("got data ", data)
        },
        (error) => {
            console.log("got error from the Observable: ", error)
        },
        () => {
            console.log("observable completed")
        });

推荐阅读