首頁  >  文章  >  web前端  >  JavaScript Promise 的執行順序是什麼?

JavaScript Promise 的執行順序是什麼?

Patricia Arquette
Patricia Arquette原創
2024-10-24 11:22:02861瀏覽

What Is the Order of Execution in JavaScript Promises?

JavaScript Promise 中的執行順序是什麼?

JavaScript Promise 是一種處理非同步操作的方法。當 Promise 被解析時,它會在目前執行緒完成後非同步執行其 .then() 處理程序。這意味著當前執行緒中的任何同步程式碼都將在 .then() 處理程序之前執行。

示例

考慮以下代碼片段:

<code class="javascript">Promise.resolve('A')
  .then(function(a){console.log(2, a); return 'B';})
  .then(function(a){
     Promise.resolve('C')
       .then(function(a){console.log(7, a);})
       .then(function(a){console.log(8, a);});
     console.log(3, a);
     return a;})
  .then(function(a){
     Promise.resolve('D')
       .then(function(a){console.log(9, a);})
       .then(function(a){console.log(10, a);});
     console.log(4, a);})
  .then(function(a){
     console.log(5, a);});
console.log(1);
setTimeout(function(){console.log(6)},0);</code>

結果此代碼片段的內容為:

<code class="text">1
2 "A"
3 "B"
7 "C"
4 "B"
8 undefined
9 "D"
5 undefined
10 undefined
6</code>

說明

  1. 第1 行:程式碼先解析值為「A」的Promise。
  2. 第 2-4 行:此 Promise 上的 .then() 處理程序將值「A」記錄到控制台並傳回值「B」。
  3. 第 5-9 行:前一個處理程序傳回的 Promise 上的 .then() 處理程序將值「B」記錄到控制台並傳回相同的值。
  4. 第 10-14 行:前一個處理程序傳回的 Promise 上的 .then() 處理程序將值「B」記錄到控制台並傳回相同的值。
  5. 第 15-19 行:前一個處理程序傳回的 Promise 上的 .then() 處理程序將值「B」記錄到控制台並傳回相同的值。
  6. 第 20 行:.then() 處理程序在前一個處理程序傳回的 Promise 上將值「B」記錄到控制台。
  7. 第 21 行: setTimeout() 函數用來安排在延遲後執行的函數0 毫秒。
  8. 第 22 行:console.log() 函數用於將值「1」記錄到控制台。

順序執行

這段程式碼的執行順序是:

  1. 先執行第22行的console.log(),然後再執行第1行的Promise.resolve() .
  2. 接下來執行第2 行的.then() 處理程序,然後執行第5 行的.then() 處理程序。
  3. 接下來執行第 10 行的 .then() 處理程序,然後是第 15 行的 .then() 處理程序。
  4. 接下來執行第 20 行的 .then() 處理程序。
  5. 最後執行第 21 行的 setTimeout() 函數。

以上是JavaScript Promise 的執行順序是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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