如何确保所有主Action与子Action完成后再触发finalAction?
解决主/子Action全部完成后再触发finalAction的问题
你的问题核心是:fetchActions数组仅包含了主action的Promise,后续子subAction的异步操作没有被纳入等待链,导致Promise.all只等主action完成就触发了finalAction。
修改后的代码:
const exampleFunction = () => { const fetchActions = someArray.map(() => { // 返回完整Promise链,让主action完成后等待子action执行 return dispatch(action()).then(response => { if (response?.data) { // 将子action的Promise返回,纳入链式等待 return dispatch(subAction({response: response.data})) } // 无数据时返回已resolved的Promise,保证链不中断 return Promise.resolve() }) }) return Promise.all(fetchActions) .then(() => dispatch(finalAction())) }
逻辑说明:
- 每个
map迭代项都返回完整的Promise链:先执行主action,待其resolve后,再根据条件执行子subAction(若有数据),并将子action的Promise返回,让它成为链的一部分。 Promise.all(fetchActions)现在会等待所有主action、以及对应的子action(如果触发)全部完成后,才会进入回调触发finalAction。- 当
response?.data不存在时,返回Promise.resolve()确保Promise链不会因为无返回值而提前结束,保证整体逻辑的一致性。
内容的提问来源于stack exchange,提问作者Dani Alcalà
相关产品推荐
相关产品推荐

