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()
是另乙個巨集任務,所以先放在巨集任務佇列。
然後執行async1
,async1
裡先列印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...