首页 > 解决方案 > 多个 API 调用期间的角度错误处理

问题描述

在我的 Angular 应用程序中,我必须依次调用两个 API 方法。如果第一个 API 调用返回 200 OK 或 Success,则需要调用第二个 API 方法。

如果第一次调用不成功,则需要记录错误并且不应调用第二种方法。

如果第一次调用成功,则需要调用第二个 API 方法,如果响应为 200 OK 或成功,则应返回成功。

如果第二次调用不成功,则需要记录不同的错误消息。

从 'rxjs/operators' 导入 { switchMap };

validateandSave(user: User) {
  return this.utility.validate().pipe(
    switchMap(data => {
      this.result= data.status;

      if(status == 'success')
//     call second method
      
    })
  )
}

这里主要的是,如果第一次调用失败,则不应调用第二个 API 方法。

在 Google 中,可以看到带有 switchMap、mergeMap、Pipe 等的解决方案。但我找不到单独处理错误的解决方案。

有人可以分享我处理这种情况的示例代码吗?

标签: angularrxjsangular7

解决方案


这个问题被问了很多。有很多方法可以管理 RxJS 流的错误。这是一个:它捕获错误,记录它们,然后静默完成,最终订阅没有任何错误。

当然,通常你想要做得比忽略你的错误更好。

validateandSave(user: User) {
  return this.utility.firstStream().pipe(
    catchError(err => {
      console.log("Error from first call: ", err);
      return EMPTY;
    }),
    switchMap(data =>
      data.result === something ?
      this.utility.secondStream() :
      EMPTY;
    ),
    catchError(err => {
      console.log("Error from second call: ", err);
      return EMPTY;
    })
  )
}

推荐阅读