首页 > 解决方案 > 为什么 Node 似乎在等待所有 Promise 解决?

问题描述

我是 JavaScript 和 NodeJS 的新手,所以如果这个问题是初级的,请原谅我。

假设我只有一个简单的文件hello.js,我运行它,$ node hello.js这个文件包含的所有内容是

setTimeout(() => {console.log('hello');}, 5000);

为什么这个程序没有立即结束?为什么它要等待底层的 Promise 解决?

毕竟,Promise 关联的不是setTimeout异步创建和运行的吗?那么当没有更多代码运行时,执行的主“线程”不会“脱落”吗?

标签: node.js

解决方案


Node 事件循环一直运行,直到所有未完成的任务都完成或取消。

setTimeout创建一个挂起的事件,因此循环将继续运行直到执行。

未完成的 PromisesetInterval和其他机制都可以防止事件循环停止。

值得注意的是,它setTimeout根本不使用 Promise。这只是一个常规的回调函数。setTimeout()API 早于 Promises 。


推荐阅读