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

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

小白,請教各位大佬!javascript中異步promise等的執(zhí)行順序問題十分感謝

小白,請教各位大佬!javascript中異步promise等的執(zhí)行順序問題十分感謝

開滿天機(jī) 2019-07-28 12:45:20
下面的一段JS代碼setTimeout(function(){console.log("1")});newPromise(function(resolve){console.log("2")resolve();}).then(function(){console.log("3")})console.log("4")上面的的運(yùn)行結(jié)果是2431百思不得其解,為什么是2先出,setTimeout后面沒有秒數(shù)不是應(yīng)該直接執(zhí)行嗎?,而且3不是應(yīng)該在2后面輸出嗎?為什么到4后面了?
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

setTimeout默認(rèn)值是0,所以2先出然后不管同步還是異步,在瀏覽器端,Promise會使用MutationObserver監(jiān)聽一個(gè)document.createTextNode(''),然后通過改變node.data的值來觸發(fā)observer,執(zhí)行callback,而在事件循環(huán)中,MutationObserver屬于微任務(wù),會比setTimeout先運(yùn)行
es6-promiseasap.js
constBrowserMutationObserver=browserGlobal.MutationObserver||browserGlobal.WebKitMutationObserver;
functionuseMutationObserver(){
letiterations=0;
constobserver=newBrowserMutationObserver(flush);
constnode=document.createTextNode('');
observer.observe(node,{characterData:true});
return()=>{
node.data=(iterations=++iterations%2);
};
}
if(isNode){
scheduleFlush=useNextTick();
}elseif(BrowserMutationObserver){
scheduleFlush=useMutationObserver();
}elseif(isWorker){
scheduleFlush=useMessageChannel();
}elseif(browserWindow===undefined&&typeofrequire==='function'){
scheduleFlush=attemptVertx();
}else{
scheduleFlush=useSetTimeout();
}
                            
查看完整回答
反對 回復(fù) 2019-07-28
  • 2 回答
  • 0 關(guān)注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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