js同步任務和異步任務的執行順序


先來道今日頭條面試題開開胃

async function async1() {
    console.log('async1 start');
    await async2();                
    console.log('async1 end');
}
async function async2() {
    console.log('async2');
}
console.log('script start');
setTimeout(function() {
    console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
    console.log('promise1');
    resolve();
}).then(function() {
    console.log('promise2');
});
console.log('script end');
/**
 * scripr start
 * async1 start
 * async2
 * promise1
 * scroptend
 * async1end
 * promise2
 * setimeout
 */

執行結果是不是和你想的有些不同?下面是我查閱資料后總結的同步任務和異步任務的執行順序

1、不管是同步還是異步,js都會按順序執行,只是不等待異步的執行結果而已(並不是遇到異步的就繞過不執行,別蒙了)

2、同步的任務沒有優先級之分,異步執行有優先級,先執行微任務(microtask隊列),再執行宏任務(macrotask隊列),同級別按順序執行

  微任務: `process.nextTick` ,`promise` ,`MutationObserver`

  宏任務:`script` , `setTimeout` ,`setInterval` ,`setImmediate` ,`I/O` ,`UI rendering`

3、await表示讓出線程,繼續執行后面的函數(執行當前函數后面的函數,不是當前函數里面的)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM