如何并行执行多个 API 调用并在响应到达 Angular 中的 HTTP 服务时处理响应?

问题描述 投票:0回答:1

我有一个 HTTP 服务,用于接收需要由多个其他 API 使用的响应。我想并行执行这些 API 调用。此外,我不想等待所有 API 完成执行;相反,我想在收到每个 API 的响应后立即对其进行处理。

这就是我想要实现的目标:

  1. 我的主要 HTTP 服务收到响应。
  2. 此响应需要传递给多个其他 API。
  3. 这些 API 应该并行调用。
  4. 一旦一个 API 响应,我想立即处理其数据,而不用等待其他 API。
search(metaInfo: Interface1, searchDetails: Interface2) {
    return this.http.post<Interface3>(API_ROUTES.history, metaInfo)
    .pipe(
      switchMap((res) => {
        return combineLatest([
          this.http.post<any>(API_ROUTES.searchOne, {...searchDetails, requestId: res.requestId}),
          this.http.post<any>(API_ROUTES.searchTwo, {...searchDetails, requestId: res.requestId})
        ])
      })
    )
  }

是否有任何

rxjs
运算符可以用来代替
combineLatest
forkJoin
,以便我可以在响应到达时订阅它们,而不必等待两个请求完成。

P.S.:第一个 API 执行时间 1 秒,第二个 API 执行时间 30-40 秒,所以不能等待两个 API 完成执行

angular http rxjs
1个回答
0
投票

尝试合并 rxjs

search(metaInfo: Interface1, searchDetails: Interface2) {
    return this.http.post<Interface3>(API_ROUTES.history, metaInfo)
    .pipe(
      switchMap((res) => {
        return merge(
          this.http.post<any>(API_ROUTES.searchOne, {...searchDetails, requestId: res.requestId}),
          this.http.post<any>(API_ROUTES.searchTwo, {...searchDetails, requestId: res.requestId})
        )
      })
    )
  }
© www.soinside.com 2019 - 2024. All rights reserved.