今日頭條async await面試題執行順序

2021-09-03 08:53:47 字數 1344 閱讀 9689

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

首先,要理解巨集任務佇列和微任務佇列,巨集任務是**執行的主線,本來只有一條巨集任務線,但如果遇到 settimeout 之類的就會新建乙個巨集任務線,然後每個巨集任務裡面會有乙個微任務佇列,巨集任務在執行過程中如果遇到promise.then()之類的微任務,就會推到當前巨集任務的微任務佇列當中,在本輪巨集任務的同步**執行完之後,依次執行微任務

首先執行列印script start

然後來到了settimeout, 新建一條巨集任務,排在第一條巨集任務後面

執行async1,列印async1 start

執行await async2 , 從右往左執行,執行async2,列印async2, 返回promise物件,

await會阻塞async1後面的**執行,所以跳出來

執行new promise 列印promise1, 把then 裡面的函式加入微任務佇列

列印script end

把async1 await中返回的promise的then 方法加入微佇列, 執行await後面的**需要then 方法的執行,所以這個時候算是巨集任務都執行完了,因為卡在那不動了,開始執行微任務

執行微佇列,列印promise2, 執行第二個微任務,啥也沒列印

then()方法引數裡拿到結果以後,async2 await算是執行結束了,後面的**不再被阻塞

列印 await後面的async1 end

來到第二條巨集任務線,列印settimeout

總結一下列印順序:

script start

async1 start

async2

promise1

script end

promise2

async1 end

settimeout

今日頭條 今日頭條三面面經

一面 1 演算法題,程式設計實現nsum 2 實現元素的居中並且寬高比為3 4 3 實現繼承 4 給了一段 給出輸出結果,這個是和非同步相關 5 http的狀態碼有哪些 6 cookie和session的區別,以及如何生成session 7 給 寫輸出和原型鏈相關 8 變數宣告提公升 三面 1 介紹...

今日頭條筆試

問題描述 給定乙個段落,由 n 個句子組成。第 i 個句子的長度為 l i 包含的單詞個數為 w i 句子不包含任何除字母和空格 外的符號。每個句子內部,含有若干個單詞,由空格 分隔。句子不會包含連續的空格。隨後給定 m 個查詢,每個查詢包含乙個句子,需要在段落中尋找相同單詞數量最多的句子。重複的單...

今日頭條emmmmmmm

迭代器的用處就是重複的運作一道一百,像乙個家庭爺爺生了爸爸才能有孫子。這個迭代器級別非常關鍵斷了乙個也不行!迭代器 只要 iter 方法的物件就是迭代物件 字串,列表,元祖,字典,集合,檔案都可迭代物件!next 其實是在遍歷可迭代物件的元素,一遍完成報錯。迭代器 是擁有 iter 方法,迭代物件擁...