You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RxJS:多组请求链式调用实现问题咨询

RxJS 多阶段数据流完善实现

需求阶段

  • 阶段1:并行执行「创建实体」和「添加属性」两个请求
  • 阶段2:阶段1成功后,批量执行「创建关联实体」请求数组
  • 阶段3:阶段2成功后,批量执行「关联实体」请求数组
  • 阶段4:阶段2成功后,批量执行「删除过时关联」请求数组

完善后的代码

forkJoin([
  createEntity(),    // 阶段1 - 创建实体请求
  saveAttributes()   // 阶段1 - 添加属性请求
]).pipe(
  // 阶段1成功后执行阶段2:批量创建关联实体
  switchMap(() => forkJoin(createRelatedAssets())),
  // 阶段2成功后并行执行阶段3和阶段4(无依赖时用这个)
  switchMap(() => forkJoin([
    forkJoin(createAssociations()),  // 阶段3 - 关联实体请求数组
    forkJoin(deleteOutdatedAssociations())  // 阶段4 - 删除过时关联请求数组
  ]))
  // 若阶段3必须先于阶段4执行,替换上面的switchMap为下面这段:
  // switchMap(() => concat(
  //   forkJoin(createAssociations()),
  //   forkJoin(deleteOutdatedAssociations())
  // ))
).subscribe({
  next: () => console.log('所有流程执行成功'),
  error: (err) => onError(err, 'API 请求失败')
});

关键说明

  • 同一阶段的批量/并行请求用forkJoin包裹,确保组内所有请求全部成功才视为该阶段完成;
  • 跨阶段用switchMap衔接,只有前一阶段完全成功才会触发下一阶段;
  • 因为不需要请求返回的具体数据,所以switchMap里直接用() =>省略参数接收,简化代码;
  • 阶段3和4的执行顺序可按需调整:无依赖时用forkJoin并行执行节省时间,有先后要求时用concat串行执行。

内容的提问来源于stack exchange,提问作者devaskim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:00:49