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