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

如何等待所有Promise执行完毕后再运行后续收尾代码

问题根因分析
  • 你实现的functionOne、functionTwo返回的Promise没有主动触发resolve,导致Promise一直处于pending状态,后续的then回调永远不会被执行,这就是你看到收尾日志要么提前打印要么完全不输出的核心原因。
  • 最初的runningFunctions async函数内部没有等待两个异步任务执行完成,也没有返回对应的Promise集合,所以调用runningFunctions().then()的时候,回调会立即触发,不会等任务结束。
正确实现代码
const logger = console;

const functionOne = function () {
  logger.info("Starting functionOne");
  return new Promise(resolve => {
    setTimeout(function () {
      logger.info("Finished functionOne after 20 sec.");
      resolve(); // 标记Promise任务完成
    }, 20000);
  });
};
    
const functionTwo = function () {
  logger.info("Starting functionTwo");
  return new Promise(resolve => {
    setTimeout(function () {
      logger.info("Finished functionTwo after 10 sec.");
      resolve(); // 标记Promise任务完成
    }, 10000);
  });
};

const runningFunctions = async function () {
  logger.info('Start jobs');
  // 并行执行两个任务,等待全部完成后再结束当前函数
  await Promise.all([functionOne(), functionTwo()]);
}

// 所有任务完成后执行收尾逻辑
runningFunctions().then(
  () => { logger.info(`All done after 20 sec.`) }
).catch(
  err => { logger.error(err) }
);
实现说明
  • 两个异步函数内部新增resolve()调用,任务执行完毕后主动通知Promise状态变更为已完成
  • runningFunctions内部通过Promise.all实现两个任务并行执行,并用await阻塞等待所有任务执行完成
  • 收尾逻辑放在runningFunctions的then回调中,保证所有异步任务全部执行结束后才会触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:01