当我执行以下代码时,我认为Node.js会一直等到我们调用resolve.在此之前,myPromise将处于<pending>状态.那么为什么 node 在解析之前就退出了呢?

下面的代码立即退出!

const myPromise = new Promise(resolve => {
  // nothing doing with the resolve
});

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

Update 1:为了避免混淆,我将JavaScript重命名为Node.js.

推荐答案

下面的代码立即退出!

使Node.js进程保持运行的是active in-progress work或它的可能性(挂起的计时器、可能接收消息的打开套接字等).因此,例如,如果您的代码使用了fs/promises中的readFile,并且您正在使用的promise 来自于此,那么Node.js不会仅仅终止于您所显示的代码的末尾,因为有一个操作正在进行(读取文件).从The Node.js Event Loop, Timers, and process.nextTick() guide人开始:

在每次运行事件循环之间,Node.js会判断它是否正在等待任何异步I/O或计时器,如果没有,则干脆关闭.

但是在您的示例中,没有任何进程,Node.js没有等待任何东西,所以它退出.

Javascript相关问答推荐

如何从JavaScript中的公共方法调用私有方法?

获取表格的左滚动位置

仅圆角的甜甜圈图表

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

角色 map 集/spritebook动画,用户输入不停止在键上相位器3

使搜索栏更改语言

如何使覆盖div与可水平滚动的父div相关?

未捕获错误:[]:getActivePinia()被调用,但没有活动Pinia.🍍""在调用app.use(pinia)之前,您是否try 使用store ?""

屏幕右侧屏障上的产卵点""

Use Location位置成员在HashRouter内为空

如何在 Select 文本时停止Click事件?

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

令牌JWT未过期

使用jQuery find()获取元素的属性

如何在Java脚本中对数据进行签名,并在PHP中验证签名?

如何使用抽屉屏幕及其子屏幕/组件的上下文?

重新呈现-react -筛选数据过多

使用createBrowserRoutVS BrowserRouter的Reaction路由

Promise.race()返回已解析的promise ,而不是第一个被拒绝的promise

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空