簡體   English   中英

回調和承諾如何在javascript中實現異步屬性?

[英]How Callback and Promise Achieve Async Property in javascript?

我懷疑 JavaScript 是一種單線程同步編程語言。 並且它只有一個 Callstack 。那么 Callback 和 promise 如何實現 Asycrones 屬性?

他們沒有。 回調和承諾不會使任何異步。 相反,回調和承諾是允許異步函數與其余代碼交互的設計模式。

下面是兩個回調的例子,一個是同步的,一個是異步的:

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 對象)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM