首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在底层可观察的抛出错误时,RxJS也不会在映射时抛出错误。

即使在底层可观察的抛出错误时,RxJS也不会在映射时抛出错误。
EN

Stack Overflow用户
提问于 2019-05-09 05:51:49
回答 1查看 187关注 0票数 1

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

现在我就像下面这样做-

代码语言:javascript
复制
   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();
        });
      });
  }

,但是我更喜欢使用Observable.map操作符。,Observable.map的问题是当api抛出一个400,整个可观察到的模式进入错误模式。

我想防止这种情况,因为get调用与其他调用一起在forkJoin中使用。如果失败,将意味着下面整个forkJoin的失败。

代码语言:javascript
复制
forkJoin([
        this.http.get('/api/route-2'),
        this.http.get('/api/route-1'),
        this.fetchStatus('abc')
      ]).subscribe((responseCollection: any) => {
        observer.next({
          result1: responseCollection[0],
          result2: responseCollection[1],
          result3: responseCollection[2]
        });
        observer.complete();
      }, error => observer.error(error));
EN

回答 1

Stack Overflow用户

发布于 2019-05-09 06:14:53

您可以使用catchError. 地图 和来完成这一任务。

catchError将捕获源引发的任何错误,并返回一个新的可观察的。在您的示例中,在发生HTTP错误时,这个新的可观察的内容将传递给forkJoin

代码语言:javascript
复制
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')),
    );
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56052960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档