RxJS在映射时不会抛出错误,即使底层observable抛出错误

RxJS在映射时不会抛出错误,即使底层observable抛出错误,rxjs,rxjs6,rxjs-pipeable-operators,Rxjs,Rxjs6,Rxjs Pipeable Operators,我有一个网络调用,api可能会抛出400错误。我想优雅地处理这件事 现在我像下面这样做- private fetchStatus(objectId: string): Observable<string> { return Observable.create((observer) => { this.http.get('/api/data-one').subscribe(response => { if (respon

我有一个网络调用,api可能会抛出400错误。我想优雅地处理这件事

现在我像下面这样做-

   private fetchStatus(objectId: string): Observable<string> {
      return Observable.create((observer) => {
        this.http.get('/api/data-one').subscribe(response => {
          if (response.result === 'SUCCESS') {
              observer.next('SUCCESS');
          } else {
              observer.next('DENIED');
          }
          observer.complete();
        },
        error => {
          observer.next('DENIED');
          observer.complete();
        });
      });
  }

您可以使用和执行此操作。

catchError
将捕获源抛出的任何错误,并返回一个新的可观察值。在您的情况下,如果出现HTTP错误,这个新的可观察对象将被传递到
forkJoin

private fetchStatus(objectId: string): Observable<string> {

    return this.http.get('/api/data-one').pipe(
        map(response => response.result === 'SUCCESS' ? 'SUCCESS' : 'DENIED'),
        catchError(error => of('DENIED')),
    );
  }
private fetchStatus(objectId:string):可观察{
返回此.http.get('/api/data one').pipe(
映射(response=>response.result=='SUCCESS'?'SUCCESS':'DENIED'),
catchError(error=>of('DENIED')),
);
}
private fetchStatus(objectId: string): Observable<string> {

    return this.http.get('/api/data-one').pipe(
        map(response => response.result === 'SUCCESS' ? 'SUCCESS' : 'DENIED'),
        catchError(error => of('DENIED')),
    );
  }