首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >要使用角度/离子的forkJoin调用批处理格式的多个api调用

要使用角度/离子的forkJoin调用批处理格式的多个api调用
EN

Stack Overflow用户
提问于 2022-06-30 16:50:22
回答 1查看 405关注 0票数 0

我有很多请求,比如:

代码语言:javascript
运行
复制
let array = [req1,req2,req3.....,req(n)]

目前,我只在收到所有请求响应后才使用forkJoin来呼叫订户。现在,我想修改我的代码以批量进行api调用,但是只有在完成所有批处理响应后才能调用订阅者,这是可能的吗?

示例

代码语言:javascript
运行
复制
public demoCalls() {
       let demoForkJoin
       var a = [req1,req2,....,req45]
       a.map((data,index)=>{
            demoFrokJoin[index] = this.http.post()
       })
       forkJoin(demoForkJoin)

}

现在,我要调用10-10 req,而不是这个批处理。每个10 req将在1000 be后调用。

只有在收到所有api的响应后,才会调用一个订阅者。(所有45个api)

代码语言:javascript
运行
复制
demoCall().subscribe(res=>{
  // this subscribe only once after all calls are completed and got success result
}) 
EN

回答 1

Stack Overflow用户

发布于 2022-07-01 07:35:09

我建议使用一些rxjs操作符的并发值,而不是批处理。例如,mergeMap提供了这个值。在完成一个可观测的操作之后,下一个可观测到的就被订阅了。为finish操作添加finalize

下面的示例有两个并发请求

代码语言:javascript
运行
复制
import { Observable, of, range } from 'rxjs';
import { delay, finalize, mergeMap } from 'rxjs/operators';

function req(id: number): Observable<number> {
  console.log('request received for id', id);

  return of(id).pipe(delay(5000));
}

range(0, 10)
  .pipe(
    mergeMap((r) => req(r), 2),
    finalize(() => console.log('all requests done'))
  )
  .subscribe((id) => console.log('request completed for id', id));

在Stackblitz:https://stackblitz.com/edit/typescript-cmylca?file=index.ts上查看此操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72819404

复制
相关文章

相似问题

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