异步操作和事件循环
常见 JavaScript 编程环境中的许多有趣操作都是异步的。例如,在浏览器中我们看到类似的东西
window.setTimeout(() => {
console.log("this happens later");
}, 100);
在 Node.js 中我们看到类似的东西
fs.readFile("file.txt", (err, data) => {
console.log("data");
});
这如何适合事件循环?
这是如何工作的,当这些语句执行时,它们会告诉主机环境 (分别是浏览器或 Node.js 运行时),可能会在另一个线程中执行某些操作。当主机环境完成这件事(分别等待 100 毫秒或读取文件 file.txt
)时,它会将一个任务发布到事件循环,说先调用我之前给出的回调。
事件循环然后忙着做它的事情:渲染网页,监听用户输入,并不断寻找已发布的任务。当它看到这些发布的任务来调用回调时,它将回调为 JavaScript。这就是你获得异步行为的方式!