事件循環event loop


const promise = new Promise((resolve, reject) => {
    console.log(1);
    resolve();
    console.log(2);
})
promise.then(() => {
    console.log(3);
})
console.log(4);
以上輸出結果為1243
首先Promise新建后立即執行,所以會先輸出1,2,而Promise.then()內部的代碼在當次事件循環的結尾立即執行,所以會先輸出4,最后輸出3.

事件循環里面有宏任務和微任務:
宏任務有setTimeout、setInterval、 setImmediate、script(整體代碼)、 I/O 操作等
微任務有process.nextTick、new Promise().then(回調)

Node與瀏覽器的 Event Loop 差異:
node11及之后與瀏覽器保持一致,先執行一個宏任務,宏任務執行完把當前的微任務清空
node10及之前允許多個宏任務先執行,然后再按順序清空宏任務對應的微任務隊列
setTimeout(()=>{
    console.log('timer1')
    Promise.resolve().then(function() {
        console.log('promise1')
    })
}, 0)
setTimeout(()=>{
    console.log('timer2')
    Promise.resolve().then(function() {
        console.log('promise2')
    })
}, 0)

  在瀏覽器中執行輸出:timer1 promise1 timer2 promise2

  node10執行輸出:timer1 timer2 promise1 promise2

  node11執行輸出:timer1 promise1 timer2 promise2與瀏覽器保持一致

 


免責聲明!

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



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