promise async和await的執行順序

2022-07-06 20:48:08 字數 1242 閱讀 2192

搞不清楚js的執行順序,直到遇到了下面這個題目,現在已經會分析了

這個題目需要分析js的事件迴圈和**佇列

列印順序是什麼:

async function

async1()

async

function

async2()

settimeout(

function

() ).then(

function

() )

});async1();

new promise(function

(resolve) ).then(

function

() );

console.log('9');

執行解析:

async1和async2都是函式,需要呼叫才會執行

settimeout為巨集任務,會進入巨集任務佇列等待執行

async1函式被呼叫,立即執行裡面的console.log('1');

執行console.log(await async2())的時候,async2函式被呼叫,立即執行裡面的console.log('3');

此時async2函式中的return '0' 會進入微任務佇列,async1函式中的console.log('2')也進入微任務佇列

執行new promise中的console.log('7'),new promise中的then函式進入微任務佇列

執行console.log('9')

以上第一輪可以立即執行的任務執行結束

第二輪開始執行依次微任務佇列

先看微任務佇列裡面待執行的任務

async2函式中的return '0'

async1函式中的console.log('2')也進入微任務佇列

執行async2函式中的return '0',即console.log(await async2()) = console.log('0')

執行async1函式中的console.log('2')

執行new promise中的then函式,console.log('8');

第二輪執行結束

第三輪繼續執行微任務

第三輪執行結束

開始執行巨集任務

執行console.log('4');

執行console.log('5');

執行console.log('6');

列印結果

1 3 7 9 0 2 8 4 5 6

如何傳遞shell變數給aw

一 var 這種寫法大家無需改變用 括起awk程式的習慣,是老外常用的寫法.如 var test awk begin 這種寫法其實際是雙括號變為單括號的常量,傳遞給了awk.如果var中含空格,為了shell不把空格作為分格符,便應該如下使用 var this is a test awk begin...

AW291 蒙德里安的夢想

題目位址 易錯點 結論1 在合法狀態下,對於每個橫塊的正上方兩個格仔中任意乙個格仔,一定屬於某個橫塊的一部分或某個豎塊的下半部.證明 假設有乙個橫塊的正上方兩格中的某格為乙個豎塊的上半部,由定義可知該情況不成立.對於任意乙個格仔,只有可能為以下三種狀態之一 豎塊上半部 豎塊下半部 半個橫塊.由 1 ...

ssh登入指令碼 expect語言中使用awk

五一勞動節被叫過去加班,要公升級程式,有100多台的伺服器。需要先登入伺服器,再將伺服器上的程式停掉,伺服器上的程式程序是用screen建立的,ps ef 他的程序pid 然後kill掉 usr bin expect set ipaddr lindex argv 0 spawn ssh ict ip...