node.js - 为什么 Node 似乎在等待所有 Promise 解决?
问题描述
我是 JavaScript 和 NodeJS 的新手,所以如果这个问题是初级的,请原谅我。
假设我只有一个简单的文件hello.js
,我运行它,$ node hello.js
这个文件包含的所有内容是
setTimeout(() => {console.log('hello');}, 5000);
为什么这个程序没有立即结束?为什么它要等待底层的 Promise 解决?
毕竟,Promise 关联的不是setTimeout
异步创建和运行的吗?那么当没有更多代码运行时,执行的主“线程”不会“脱落”吗?
解决方案
Node 事件循环一直运行,直到所有未完成的任务都完成或取消。
setTimeout
创建一个挂起的事件,因此循环将继续运行直到执行。
未完成的 PromisesetInterval
和其他机制都可以防止事件循环停止。
值得注意的是,它setTimeout
根本不使用 Promise。这只是一个常规的回调函数。setTimeout()
API 早于 Promises 。
推荐阅读
- django - 如何在 Django 模型上创建一个重复的通用字段,该字段不会在管理员中呈现来自其他对象的条目?
- linux - 如何在 bash 中动态创建变量?
- ios - 如何在iOS中平均拉伸图像的左右边缘?
- python - 通过 pysftp 附加到 SFTP 服务器上的现有文件
- python - python - 为什么我的def没有调用就自动运行
- swift - 当child为列表时,按child查询过滤
- c# - Visual Studio 卡住光标
- python - 如何使用单个 3 个索引列表而不是 3 个嵌套循环进行迭代?
- etcd - Raft算法,防止项增加
- perl - 将文件名写为 txt 文件的第一行 + 周围的文本 / osx perl