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

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

請各位大佬指點!javascript中異步promise等的執(zhí)行順序問題各位有什么建議?

請各位大佬指點!javascript中異步promise等的執(zhí)行順序問題各位有什么建議?

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

2 回答

?
陪伴而非守候

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

setTimeout默認值是0,所以2先出然后不管同步還是異步,在瀏覽器端,Promise會使用MutationObserver監(jiān)聽一個document.createTextNode(''),然后通過改變node.data的值來觸發(fā)observer,執(zhí)行callback,而在事件循環(huán)中,MutationObserver屬于微任務(wù),會比setTimeout先運行
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-08-05
  • 2 回答
  • 0 關(guān)注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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