搞不清楚js的執行順序,直到遇到了下面這個題目,現在已經會分析了
這個題目需要分析js的事件迴圈和**佇列
列印順序是什麼:
async functionasync1()
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...