非同步操作和事件迴圈

常見 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。這就是你獲得非同步行為的方式!