nextTick源码

https://segmentfault.com/a/1190000015680531https://segmentfault.com/a/1190000015680531在下次 DOM 更新循环结束之后执行延迟回调。是微任务队列中最先执行的回调函数。

1.把cb函数放到回调队列里去,如果支持macroTask,则利用macroTask在下一个事件循环中执行这些异步的任务,如果不支持macroTask,那就利用microTask在下一个事件循环中执行这些异步任务。

2.我们用nextTick的时候,还可以有promise的写法。如果没有向nextTick中传入cb,并且浏览器支持Promise的话,我们的nextTick返回的将是一个Promise。所以,nextTick的写法也可以是如下这样的

 nextTick().then(()=>{console.log("XXXXX")})

3.但是为什么执行macroTimerFunc或者microTimerFunc就会在下一个tick执行我们的回调队列呢?

macroTimerFunc:如果浏览器支持setImmediate,我们就用setImmediate,如果浏览器支持MessageChannel,我们就用MessageChannel的异步特性,如果两者都不支持,我们就降价到setTimeout

microTimerFunc:如果支持浏览器支持promise,就用promise实现。如果不支持,就降低到用macroTimerFunc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值