这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
process.nextTick()
- node中每当事件循环进行一次完整的行程时,我们都将其称为一个
滴答。 - 当一个函数传给 process.nextTick()时,则指示引擎在当前操作结束(在下一个事件循环滴答开始之前)时调用此函数。(类似于vue的$nextTick)
process.nextTick(() => {
// 需要做的事情
})
事件循环正在处理当前的函数代码。
当该操作结束时,js引擎会运行在该操作期间传给nextTick调用的所有函数。
这种方式,可以告诉js引擎要尽快执行某些东西。
而setTimeout会在下一个滴答结束时执行该函数,比使用nextTick()要晚的多。
当要确保在下一个事件循环迭代中代码已被执行,则使用 nextTick()。
setImmediate()
- 当要异步地(但要尽可能快)执行某些代码时,其中一个选择是使用 Node.js 提供的
setImmediate()函数 - 作为 setImmediate() 参数传入的任何函数都是在事件循环的下一个迭代中执行的回调。
- 传给
process.nextTick()的函数会在事件循环的当前迭代中(当前操作结束之后)被执行。 这意味着它会始终在setTimeout和setImmediate之前执行。 setTimeout和setImmediate都属于宏任务。setImmediate()(相当于使用setTimeout(() => {}, 0))
setTimeout 和 setInterval
-
setTimeout会将函数延迟n秒后执行。 -
setTimeout会返回定时器的 id。 通常不使用它,但是可以保存此 id,并在要删除此安排的函数执行时清除它 -
setInterval每 n 毫秒启动一个函数,而无需考虑函数何时完成执行。这样的话就可能会造成,一个较长时间的执行会和下一次执行重叠。为了避免这种情况,可以在回调函数完成时安排要被调用的递归的setTimeout