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

为何Node.js在Promise未resolve时就直接退出?

为什么Node.js中未resolve的Promise会导致程序立即退出?

你提到的代码确实会让Node.js进程直接退出,核心原因和Node.js的事件循环退出机制有关:

const myPromise = new Promise(resolve => {
  // 未调用resolve/reject
});

myPromise
  .then(() => console.log('result'))
  .catch(error => console.log('error', error));

关键逻辑:Node.js的进程退出判定规则

Node.js进程会在事件循环中没有任何待处理的异步任务时自动终止。具体到你的代码:

  • Promise的执行器函数是同步执行的,当执行器内的代码执行完毕(哪怕没调用resolve或reject),这段同步逻辑就彻底结束了。
  • 处于pending状态的Promise本身,并不会向事件循环中注入任何需要等待的异步任务——它只是一个状态未变更的对象,没有触发定时器、I/O操作这类能让事件循环持续运转的任务。

因此Node.js会判定当前没有需要继续处理的异步任务,直接退出进程,不会无限制等待Promise的状态变更。

对比:添加异步任务后的行为

如果在Promise执行器中加入一个异步操作(比如定时器),Node.js就会等待该任务完成后再退出:

const myPromise = new Promise(resolve => {
  setTimeout(() => resolve(), 1000); // 加入异步定时器
});

myPromise
  .then(() => console.log('result'))
  .catch(error => console.log('error', error));

此时程序会等待1秒,执行resolve后触发then回调,随后才退出——因为定时器属于事件循环中的待处理任务,Node.js会等待它执行完成。

额外说明

  • 只有当Promise的状态变更依赖于某个异步任务时,Node.js才会保持运行。如果只是单纯的pending状态(没有任何异步逻辑触发状态变更),进程会直接退出。
  • 同理,若代码中只有一个永远不会被resolve/reject的Promise,且无其他异步任务,进程同样会立即终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:08