javascript - 如果代码较大且调用堆栈不为空,事件循环如何在 2 秒内准确执行代码?
问题描述
许多解释都谈到调用堆栈是空的,但我不明白,如果我们将计时器设置为 2 秒并以异步方式执行代码,如果我有一个运行时间为 10 秒的代码并调用 -栈不为空,回调队列中的回调函数会等待11秒执行吗?
解决方案
...回调队列中的回调函数会等待 11 秒执行吗?
不一定是 11 秒,不;它将在 10 秒同步代码完成后不久运行。如果定时器的长度短于同步代码持续时间,则它的长度无关紧要。此页面中有关 Node.js 事件循环如何工作的更多详细信息。
例如,使用以下代码:
function elapsed(start) {
const elapsed = Date.now() - start;
return `${(elapsed / 1000).toFixed(4)}s`;
}
const startTimer = Date.now();
console.log(`Starting timer`);
setTimeout(() => {
console.log(`Timer fired after ${elapsed(startTimer)}`);
}, 2000);
const finish = Date.now() + 10000;
const startBusyWait = Date.now();
console.log(`Starting to wait`);
while (Date.now() < finish) {
// Busy-wait -- DON'T DO THIS
}
console.log(`Done busy-waiting after ${elapsed(startBusyWait)}`);
你会看到类似的东西:
启动计时器 开始等待 10.0000 秒后完成忙等待 计时器在 10.0050 秒后触发
推荐阅读
- javascript - 创建用户后 Firebase v9 auth.currentUser 为空
- excel - Excel 365 Windows 10 如何防止创建隐藏文件?无法删除没有管理员权限
- html - 图标 HTML 电子邮件
- node.js - socket.io 是否可以在共享主机上工作?
- arrays - $addFields 和计算不起作用 - mongodb shell
- ios - 非空列表的 SwiftUI 列表显示为空白
- python - 如何在类中使用 globals()[]
- python - Python根据是否使用特殊字符分类真假
- python - 以下 python 代码片段是否等效?
- postgresql - 从 PostgreSQL 数组中获取唯一值