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