node学习篇之基础api认知

452 阅读2分钟

这是我参与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