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

并行级联Promise问题:为何完成提示提前输出?

问题诊断与修复

你的代码存在两个关键问题,导致Promise.all提前触发了完成回调:

1. a2Promise和b2Promise未返回Promise实例

这两个函数当前没有返回值(默认返回undefined),而Promise.all要求传入Promise实例数组。当传入undefined时,Promise.all会直接将其视为已完成状态,立刻执行后续的then回调。

2. then回调内的Promise未返回

你在a1Promise().then()里创建了a2的Promise,但没有把这个Promise返回给then方法,导致a1Promise().then()对应的Promise会在a1完成后直接resolve,不会等待a2的异步任务结束。


修正后的代码

console.log("Building A1");

const a1Promise = () => { 
  return new Promise((resolve, reject) => {
    console.log("A1 Started");
    setTimeout(() => {
      console.log("A1 completed");
      resolve();
    }, 1000);
  }) 
};

console.log("Building B1");

const b1Promise = () => { 
  return new Promise((resolve, reject) => {
    console.log("B1 Started");
    setTimeout(() => {
      console.log("B1 completed");
      resolve();
    }, 1500);
  }) 
};

console.log("Building A2");

// 修正点1:返回a1Promise().then()的结果;修正点2:then回调里返回a2的Promise
const a2Promise = () => { 
  return a1Promise().then(() => {
    return new Promise((resolve, reject) => {
      console.log("A2 Started");
      setTimeout(() => {
        console.log("A2 completed");
        resolve();
      }, 2000);
    });
  }) 
};

console.log("Building B2");

// 同样的修正逻辑
const b2Promise = () => { 
  return b1Promise().then(() => {
    return new Promise((resolve, reject) => {
      console.log("B2 Started");
      setTimeout(() => {
        console.log("B2 completed");
        resolve();
      }, 2500);
    });
  }) 
};

console.log("Before Promise All");

Promise.all([a2Promise(), b2Promise()]).then(() => {
  console.log("All 'A' and 'B' promises completed in parallel"); 
});

修正后输出顺序

Building A1
Building B1
Building A2
Building B2
Before Promise All
A1 Started
B1 Started
A1 completed
A2 Started
B1 completed
B2 Started
A2 completed
B2 completed
All 'A' and 'B' promises completed in parallel

这样就能保证最终的完成提示在所有任务结束后才输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:48