参考:www.jianshu.com/p/5328c7227…
基于Node
环境的
process.nextTick
这个名字有点误导,它是在本轮循环执行的,而且是所有异步任务里面最快执行的。
Node 执行完所有同步任务,接下来就会执行process.nextTick
的任务队列。所以,下面这行代码是第二个输出结果。
基本上,如果你希望异步任务尽可能快地执行,那就使用process.nextTick
。
语法
process.nextTick(callback[, ...args])
- callback 回调函数
- args 调用callback时额外传的参数
执行顺序
Promise对象的回调函数,会进入异步任务里面的"微任务"(microtask)队列。
微任务队列追加在process.nextTick队列的后面,也属于本轮循环。所以,下面的代码总是先输出3,再输出4。
process.nextTick()
可用于赋予用户一种能力,去保证方法在对象完成constructor后但是在I/O发生前调用。
process.nextTick(() => console.log(3));Promise.resolve().then(() => console.log(4));// 3// 4
process.nextTick()
知识点
-
process.nextTick()
会将callback
添加到”next tick queue“ -
next tick queue会在当前JavaScript stack执行完成后,下一次event loop开始执行前按照FIFO出队
-
如果递归调用
process.nextTick()
可能会导致一个无限循环,需要去适时终止递归。 -
process.nextTick()
可用于控制代码执行顺序。保证方法在对象完成constructor后但是在I/O发生前调用。 -
process.nextTick()
可完全异步化API。API要么100%同步要么100%异步是很重要的,可以通过process.nextTick()
去达到这种保证
process.nextTick()
使用示例
process.nextTick()
对于API的开发很重要
console.log('start');
process.nextTick(() => {
console.log('nextTick callback');
});
console.log('scheduled');
// start
// scheduled
// nextTick callback
研究的还不够透彻,请高手指教。