我有一个 HTTP 服务,用于接收需要由多个其他 API 使用的响应。我想并行执行这些 API 调用。此外,我不想等待所有 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 完成执行
尝试合并 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})
)
})
)
}