第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Promise和setTimeout的執(zhí)行順序,感覺自己理解的eventloop都是錯的

關于Promise和setTimeout的執(zhí)行順序,感覺自己理解的eventloop都是錯的

胡說叔叔 2019-01-28 11:15:48
看代碼: setTimeout(() => {   console.log(1);    Promise.resolve().then(() => {     console.log(4);    });  });       Promise.resolve().then(() => {   console.log(2);    setTimeout(() => {     console.log(3);    });  });請輸出上面的執(zhí)行結(jié)果:...瀏覽器的輸出結(jié)果:2 1 4 3,node的輸出結(jié)果為: 2 1 3 4這樣子就有點疑惑了。。。。2和1的順序能理解,但是 4和3的順序,感覺和自己理解的知識發(fā)生沖突了,我的理解是 代碼從上往下執(zhí)行,將第一個定時器,放到事件回調(diào)隊列中,將第一個peomise.then放到微任務中,然后執(zhí)行微任務中的代碼,先輸出2,然后將第二個定時器塞入事件回調(diào)隊列,此時主線程空閑,在事件回調(diào)隊列中取出第一個定時器的回調(diào)執(zhí)行,打印1,然后將promise放到微任務中,此時就出現(xiàn)分歧了,此時的主線程或者執(zhí)行棧是從微任務中取出promise來執(zhí)行打印4還是取出定時器的函數(shù)執(zhí)行打印3;從結(jié)果來看,執(zhí)行棧選擇了打印3,從餓了么團隊的一篇文章中看到這樣一句話,node會清空當前所處階段的隊列,即執(zhí)行所有task,再去檢查微任務望解惑,不論是瀏覽器或者node端,按我的思路道理都不通啊?
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

setImmediate(() => {
console.log(1);

process.nextTick(() => {

console.log(4);

});
});

process.nextTick(() => {
console.log(2);

setImmediate(() => {

console.log(3);

});
});
這段代碼是那遍文章里面提到的, 文章說是輸出 2134
但是你會發(fā)現(xiàn)把它扔到node的最新版中輸出是 2143
舊一點的版本是 2134 這個表明node的異步執(zhí)行機制已經(jīng)改了,不是文章所說那樣了


查看完整回答
反對 回復 2019-01-28
  • 1 回答
  • 0 關注
  • 588 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號