首頁 >web前端 >js教程 >Promise 建構函數的執行函數是同步還是非同步?

Promise 建構函數的執行函數是同步還是非同步?

Patricia Arquette
Patricia Arquette原創
2024-10-30 12:06:26506瀏覽

 Is the Promise Constructor’s Executor Function Synchronous or Asynchronous?

非同步執行 Promise 建構函式回呼

Promise 建構函式接受定義 Promise 履行邏輯的執行器函式。出現了一個關鍵問題:這個執行器函數是非同步執行還是同步執行?

詳細答案

行為取決於 Promise 本身的實作。然而,Promises 的 ES6 標準明確指出,promise 的實作總是非同步。

參考規範,我們發現執行器函數(在我們的例子中是 y 函數) )確實是同步執行的(參見規範的步驟10)。然而,對 Promise 的 .then() 後續調用,例如 Promise.then(...),總是非同步執行(請參閱「PerformPromiseThen」演算法的步驟 8)。

意義

.then() 呼叫的這種非同步性質有幾個意義:

  • 如果執行器函數會修改任何變數或執行任何副作用,這些更改可能不會立即對.then( ) 處理程序。
  • .then() 處理程序可用於安排應在目前事件循環完成後執行的任務。
  • 這種非步行為確保Promise 可用於連結多個非同步

範例程式碼

考慮以下程式碼片段:

<code class="javascript">function y(resolve, reject) {
  console.log("Result");
  resolve();
}

var promise = new Promise(y);
promise.then(() => {
  console.log("Then handler executed after the synchronous execution of y");
});</code>

在在此範例中,y 函數是同步執行的。但是,一旦事件循環完成,.then() 處理程序就會非同步執行。此程式碼的輸出將是:

Result
Then handler executed after the synchronous execution of y

以上是Promise 建構函數的執行函數是同步還是非同步?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn