当前位置: 首页 > Web前端 > vue.js

vue2.6.11版本nextTick

时间:2023-03-31 21:48:58 vue.js

if(typeofPromise!=='undefined'&&isNative(Promise)){constp=Promise.resolve()timerFunc=()=>{p.then(flushCallbacks)//在有问题的UIWebView中,Promise.then不会完全中断,但是//它可能会陷入一种奇怪的状态,回调被推入//微任务队列但队列没有被刷新,直到浏览器//需要做一些其他工作,例如处理一个定时器。因此我们可以通过添加一个空定时器来“强制”刷新微任务队列。if(isIOS)setTimeout(noop)}isUsingMicroTask=true}elseif(!isIE&&typeofMutationObserver!=='undefined'&&(isNative(MutationObserver)||//PhantomJS和iOS7.xMutationObserver.toString()==='[objectMutationObserverConstructor]')){//在原生Promise不可用的地方使用MutationObserver,//例如PhantomJS,iOS7,Android4.4//(#6466MutationObserver在IE11中不可靠)让counter=1constobserver=newMutationObserver(flushCallbacks)consttextNode=document.createTextNode(String(counter))observer.observe(textNode,{characterData:true})timerFunc=()=>{计数器=(counter+1)%2textNode.data=String(counter)}isUsingMicroTask=true}elseif(typeofsetImmediate!=='undefined'&&isNative(setImmediate)){//回退到setImmediate。//从技术上讲,它利用了(宏)任务队列,//但它仍然是比setTimeout更好的选择。timerFunc=()=>{setImmediate(flushCallbacks)}}else{//回退到setTimeout。timerFunc=()=>{setTimeout(flushCallbacks,0)}}Promise>MutationObserver>setImmediate>setTimeoutMutationObserver可以监控DOM对象上的子节点删除、属性修改、文本内容修改等。让mo=newMutationObserver(回调);令domTarget=您要监控的dom节点;mo.observe(domTarget,{characterData:true//表示修改监控文本内容。})熟悉任务执行机制就可以理解