JavaScript 异步操作和事件循环

示例

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