resolve()仅改变Promise状态并注册微任务,不中断函数执行;reject()同理,均需显式return才能提前退出。

会继续执行。
resolve 不是 return,只是标记状态
调用 resolve() 只是把 Promise 内部状态从 pending 改为 fulfilled,并把后续的 .then 回调注册进微任务队列。它不会中断当前函数的执行流程,也不会像 return 那样退出函数。
- 执行器函数(传给
new Promise()的那个函数)是同步运行的 -
resolve()或reject()调用后,后面同一作用域内的代码照常执行 - 真正异步的是
.then回调,它们要等当前宏任务结束后才执行
典型例子看执行顺序
这段代码输出是 1 → 2 → 3 → 4 → 6 → 5:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
console.log(1);
new Promise(resolve => {
console.log(2);
resolve();
console.log(3); // ✅ 这行仍会执行
});
console.log(4);
Promise.resolve().then(() => console.log(5));
setTimeout(() => console.log(6), 0);
-
1、2、3、4是同步代码,按顺序立刻打印 -
5是微任务,在同步代码结束后、宏任务前执行 -
6是宏任务,排在最后
reject 同理,不是 throw
reject() 也一样:它只是让 Promise 进入 rejected 状态,不抛异常、不打断执行。
立即学习“Java免费学习笔记(深入)”;
- 调用
reject(new Error())后,后面的console.log依然执行 - 错误不会自动向上冒泡,必须靠
.catch()或await捕获 - 未捕获的 rejection 只会触发
unhandledrejection事件,不会中断 JS 执行
想提前退出?得手动加 return
如果希望 resolve() 后不再执行后续逻辑,需要显式写 return:
new Promise(resolve => {
if (someCondition) {
resolve('done');
return; // ✅ 加上这句,下面就不会执行
}
console.log('this will not run if condition is true');
});
- 不写
return,函数继续往下走 - 写
return,才是真正的“提前结束” - 这是语言行为,不是 Promise 特性

















