nextTick就是将异步函数放在下一次实践循环的微任务队列中执行
- 实现原理比较简单,极简版本:
function myNextTick(cb){
let p;
p=Promise.resolve().then(cb)
return cb?p:Promise.resolve()
}
- 复杂版本,考虑异步函数入队、执行锁、兼容处理
let callbackArr=[]
let pendding=false
function executeAsyncTask(){
//该执行promise.then了表示
pendding=false
for(let i=0;i<callbackArr.length;i++){
callbackArr[i]()
}
}
function myNextTick(cb){
callbackArr.push(cb)
if(!pendding){
pendding=true
Promise.resolve().then(executeAsyncTask)
}
if(!cb){
return Promise.resolve()
}
}