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
相关产品推荐
相关产品推荐

