有没有人遇到过这个问题哈!javascript中异步promise等的执行顺序问题大佬们有什么好的建议?

下面的一段JS代码
上面的的运行结果是2431百思不得其解,为什么是2先出,setTimeout后面没有秒数不是应该直接执行吗?,而且3不是应该在2后面输出吗?为什么到4后面了?
慕无忌1623718
浏览 255回答 2
2回答

炎炎设计

setTimeout默认值是0,所以2先出然后不管同步还是异步,在浏览器端,Promise会使用MutationObserver监听一个document.createTextNode(''),然后通过改变node.data的值来触发observer,执行callback,而在事件循环中,MutationObserver属于微任务,会比setTimeout先运行es6-promiseasap.jsconstBrowserMutationObserver=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();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript