异步操作和事件循环

常见 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。这就是你获得异步行为的方式!