如何修复axiosfunc3与axiosfunc2并行执行而非顺序执行的问题?
问题修复方案
你的核心问题有两个:一是forEach不会等待内部异步操作完成,导致多个分支的异步任务并行执行;二是异步函数调用时没有用await等待完成,导致axiosfunc3和axiosfunc2看起来同时运行。
修复步骤:
- 把
forEach替换成for...of循环,这样可以逐个处理数组元素,并且等待每个元素对应的异步操作完成后再处理下一个。 - 所有axios相关的异步函数调用前加上
await,确保前一个异步操作执行完毕后再执行后续逻辑。
修复后的代码:
(async() => { let dev = await getAllTables({ query: tables(dev_id) }); let prod = await getAllTables({ query: tables(prod_org) }); // 用for...of替代forEach,支持异步等待 for (const d of result.data.table_fields) { if (d.type != "connected_field") { await axiosfunc1(); } else if (d.label in dev) { await axiosfunc2(); } else if (d.label in prod) { // 先等待axiosfunc3执行完成,再执行axiosfunc2 await axiosfunc3(); await axiosfunc2(); } else { console.log(`${d.label} DOES NOT EXIST}`); } } })();
关键说明:
forEach本身不支持异步等待,它会一次性触发所有迭代里的异步任务,导致多个异步函数并行执行,改成for...of后可以按顺序等待每个异步操作完成。- 给
axiosfunc1/2/3加上await,确保每个异步请求执行完毕后再进入下一个逻辑分支或下一次循环,彻底解决并行执行的问题。
内容的提问来源于stack exchange,提问作者nb_nb_nb
相关产品推荐
相关产品推荐

