【问题标题】:How to call multiple http requests parallel and handle errors individually如何并行调用多个http请求并单独处理错误
【发布时间】:2021-07-19 19:27:09
【问题描述】:

我有 4 个类似于下面的函数。现在我在 ngOnInit() 上一次调用它们,但我正在寻找一种更简洁的方法来调用所有 4 个函数(GET HTTP 请求),以便它们显示微调器......全部并行运行......然后关闭微调器并处理任何错误。这是一个使用 Angular 7 的项目。

 getCustomers() {
      return this.apiService.getCustomers()
        .subscribe(
          (data: any) => {
            this.partners = data;
            this.loading = false;
          },
          error => {
            console.log(error);
            this.loading = false;
          }
        );
  }

【问题讨论】:

  • 从技术上讲,它们都已经并行运行,除了它们一个接一个地被触发。因为它是一个.subscribe() 函数,所以它不会停止其余的代码执行。当您的 web 应用程序执行 HTTP 调用时,您是否尝试显示微调器?
  • 对于错误,我会亲自在服务函数中处理它们(在这种情况下为apiService.getCustomers())。我在这里stackoverflow.com/questions/46018259/… 回答了一个类似的问题,90% 它仍然适用,除了map(),如果你的类与响应 JSON 结构匹配,则不需要这样做。 Angular 现在支持数据转换。

标签: angular


【解决方案1】:

您需要将服务中的所有可观察对象组合成一个可观察对象,然后订阅新创建的可观察对象。为此,您可以使用 RxJs 运算符 forkJoin

fork join 订阅将等待所有 observable 完成,然后将值发送到订阅方法 - 请注意,这意味着所有的单个成功和单个错误,因为 observable 只会发出一次

你也可以使用 RxJs 运算符combineLatest 这将从您的观察者列表中创建单个可观察对象,并在每次可观察对象之一完成时发出一个值。该值将是观察者发出的所有最后一个值的数组,如果观察者未完成,则为 null。这将允许您处理每个 api 调用的错误状态,但也会多次触发订阅事件。

【讨论】:

  • 好的,谢谢...我将开始研究 forkjoin。
猜你喜欢
  • 2013-06-12
  • 2018-03-02
  • 2021-07-31
  • 2017-06-29
  • 2023-01-30
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
相关资源
最近更新 更多