我懷疑 JavaScript 是一種單執行緒同步編程語言。并且它只有一個 Callstack 。那么 Callback 和 promise 如何實作 Asycrones 屬性?
uj5u.com熱心網友回復:
他們沒有。回呼和承諾不會使任何異步。相反,回呼和承諾是允許異步函式與其余代碼互動的設計模式。
下面是兩個回呼的例子,一個是同步的,一個是異步的:
function a (input, callback) {
callback(input * 2);
}
function b (input, callback) {
setTimeout(() => callback(input *2), 100);
}
console.log('start!');
a(100, x => console.log(x));
b(1000, x => console.log(x));
console.log('end!');
輸出應該是:
start!
200
end!
2000
回呼不會產生任何異步,而是一種允許異步代碼與代碼的其他部分互動的技術。
Promise 確實會重新安排您的.then()回呼,因為這就是它的設計方式。但它所做的只是.then()在代碼末尾執行。這就是它所做的一切,它不會.then()在單獨的執行緒中執行回呼。
稍后它如何執行您的代碼?好吧,你的代碼是一個函式。它只是稍后呼叫它。以后怎么稱呼?它只是將您的功能添加到需要稍后完成的事情串列中。在您的代碼末尾,解釋器將檢查這個串列(或多個串列)以查看它是否需要執行任何操作。檢查是否需要執行任何內容的這部分代碼稱為事件回圈。串列/串列中需要檢查的東西在檔案中稱為“任務”或“微任務”。
異步函式是異步的。它們是使用 C/C 實作的。因此,如果一段 C/C 代碼使用執行緒或信號或異步 I/O,它可以讓 javascript 解釋器使用 javascript 回呼(它只接受稍后將呼叫的 javascript 函式)或承諾(它回傳一個 javascript Promise 物件)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318769.html
標籤:javascript 异步 打回来 事件循环
