async await執行順序面試題

2021-09-10 22:41:48 字數 1248 閱讀 1033

async

function

async1()

async

function

async2()

console.

log(

'script start'

)settimeout

(function()

,0)async1()

;new

promise

(function

(resolve)).

then

(function()

) console.

log(

'script end'

)

結果:

script start

async1 start

async2

promise1

script end

promise2

async1 end

settimeout

解析:

先執行主**塊,所以第一行列印script start

settimeout()是另乙個巨集任務,所以先放在巨集任務佇列。

然後執行async1async1裡先列印async1 start

執行await async2, 先執行async2,列印async2, 返回promise物件。await會阻塞async1後面的**執行,所以先跳出來繼續執行後面的**。

然後執行new promise列印promise1

then裡面的函式加入微任務佇列

列印script end

到這裡第乙個巨集任務執行完畢,開始執行微任務then,列印promise2

then執行完後,await才算是執行結束了,後面的**不再被阻塞,所以列印async1 end

這時候繼續執行第二個巨集任務settimeout,列印settimeout

async await函式的執行順序的理解

最近遇到乙個關於async函式使用的bug,因 涉及太多業務,所以模擬了 如下 let testarr 1 2,3 let flag false const func res testarr.foreach async item console.log flag flag 當時寫 的人的目的很簡單,...

Lua順序 執行順序

nginx下lua處理階段與使用範圍 例如lua shared dict共享記憶體的申請,只有當nginx重起後,共享記憶體資料才清空,這常用於統計。set by lua 設定乙個變數,常用與計算乙個邏輯,然後返回結果 該階段不能執行output api control api subrequest...

程式執行順序

public class testa 類b public class testb 類 parent public class parent private testa testa2 newtesta parent變數 public parent parent的子類subclass public cl...