解释nextTick的作用首先得了解js 的时间执行机制,js 事件执行分为 同步和异步,执行的任务又分为宏任务和微任务,js 代码从上到下依次执行,先同后异,先宏后微。
解析:js 代码和计时器等都属于宏任务,像promise .then() 和 process 都属于微任务,每一个宏任务都会产生很多异步和微任务,这些代码都会同步执行完成之后去执行。微任务还在异步任务之后。
而$nextTick 原理其实是采用的process 对象的nextTick 方法,就是执行栈中的微任务,在执行$nextTick 中代码时,基本代码都已经执行完成,使用$nextTick 其实也就是防止在执行某段代码的时候,所需要的参数或者dom 没执行到或者没渲染完成,比如说在初始化echars 图标的时候,承载图表绘制的dom 还没有渲染完成,获取不到。其实就是把$naextTick 里面的代码放在下个队列里面去执行。
关于先宏后异:js 先执行一个宏任务,然后再清空这次宏任务执行过程中产生的微任务队列,然后再执行宏任务,解释关于:setTimeout 在promise 后执行的问题,是因为在执行setTimeout 的时候,本身就是一个宏任务在执行,所以不要尝试在一个为人里面产生递归新任务,要不然就会出现阻塞线程。