代码1:
function foo() {
console.log('foo');
}
process.nextTick(foo);
console.log('bar');
代码2:
function foo() {
console.log('foo');
}
foo();
console.log('bar');
第一段代码输出:
bar
foo
第二个相反:
foo
bar
为什么?
我的问题是:
感谢大伙们。
最佳答案
process.nextTick(foo)
计划在当前JS执行线程完成后调用foo()
。它实际上是通过在事件队列的前面插入对foo()
的调用来实现的。当前JS执行线程完成后,node.js引擎将从事件队列中拉出下一个事件并运行它。这将使您获得输出:
bar
foo
因为
console.log('bar')
是当前执行线程的一部分,所以它将在为事件循环中的下一个事件提供服务之前完成。换句话说,这就是
code1
示例的作用:foo
函数(实际上是在执行任何操作之前由解析器完成)process.nextTick(foo)
,它通过在事件队列中插入一个事件来调度foo()
在此Javascript线程的其余部分完成之后运行。将来将要运行的所有回调或函数都以这种方式在node.js中调度(通过事件队列)。 node.js是一个事件驱动的环境。 console.log('bar')
。 foo()
调用对process.nextTick()
的调用。 foo()
运行。 在您的
code2
示例中,这只是顺序执行。什么都没有插入到事件队列中。执行foo()
,然后在该函数返回时执行console.log('bar')
。因此,
process.nextTick()
用于显式调度某些内容,以便在当前JS执行线程完成后再运行。它类似于
setTimeout()
,但是process.nextTick()
在当前执行线程之后尽快运行,而setTimeout()
可以设置特定的时间延迟。看来您的代码示例摘自本文:Understanding process.nextTick()。那篇文章有更多的解释。
另一个引用:What are the proper use cases for process.nextTick in Node.js?
关于node.js - Node的新手,如何理解process.nextTick(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39339831/