- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
代码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)
调度 foo()
在当前 JS 线程执行完成后调用。它通过在事件队列的前面插入对 foo()
的调用来实现这一点。当当前 JS 线程执行完成后,node.js 引擎会从事件队列中拉出下一个事件并运行它。这将使您获得输出:
bar
foo
因为 console.log('bar')
是当前执行线程的一部分,所以它将在事件循环中的下一个事件被服务之前完成。
因此,简而言之,这就是 code1
示例正在执行的操作:
foo
函数(这实际上是解析器在执行之前完成的)process.nextTick(foo)
安排 foo()
在此 Javascript 线程的其余部分完成后运行,方法是在事件队列中插入一个事件。将来要运行的所有回调或函数都以这种方式在 node.js 中安排(通过事件队列)。 node.js 是一个事件驱动的环境。console.log('bar')
。process.nextTick()
调用中调用 foo()
。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/
当在代码中更新了数据,并希望等到对应的Dom更新之后,再执行一些逻辑。这时,我们就会用到$nextTick ?
我是 Vue js 新手,我试图理解方法中使用 nextTick 的逻辑。所以我有两个这样的组件: IsTuruIslem.vue ... ... .
如果我有这样的代码: class SomeClass constructor: -> @someAttr = false someFunction: -> process.ne
我正在尝试测试我的应用程序在连续两次 tick 上发生的情况。这是我目前所拥有的(测试在 karma devtools 中失败,但在命令行中失败): import { mount } from 'av
我偶然发现了一个函数( here on SO ),它可以写入文件,但确保不会覆盖文件: function writeFile(i){ var i = i || 0; var fileN
我有一个 我有一个已安装的方法,可以在其中初始化 map 。 mounted(){ this.map = L.map(this.mapId, { preferCanvas: true }).setV
尝试递归调用同步函数来解析数组的元素;一旦到达数组的最后一个元素,就会调用回调。但是,当传递给 process.nextTick 时,回调被认为是未定义的,因为在与回调相同的范围内声明的另一个变量会打
我有一个 50k 条目的列表,我正在输入我的数据库。 var tickets = [new Ticket(), new Ticket(), ...]; // 50k of them tickets.f
下面的程序会在 NodeJS 中挂起,有人知道为什么吗? ended = false;events = require('events');eventEmitter = new events.Even
Node.js 版本 0.10 今天发布,并引入了 setImmediate。 API changes文档建议在执行递归 nextTick 调用时使用它。 来自什么MDN says它看起来与proce
我应该多久或何时使用 process.nextTick ? 我明白它的目的(主要是因为 this 和 this )。 根据经验,当我必须调用回调时,我总是使用它。这是一般方法还是还有其他方法? 此外,
更新:事实证明这是一个非常愚蠢的问题。我只是没有注意到引用的示例中的一些简单的事情。 我一直在查看有关滴答声和事件循环的信息,大部分内容都很清楚,但 the nextTick documentatio
下面是“practise01.js”文件中的代码, function fn(name){ return f; function f(){ var n = name;
Node.js 0.10 版今天发布,引入了setImmediate。 API changes文档建议在进行递归 nextTick 调用时使用它。 来自MDN says它似乎与 process.nex
我读过 nextTick 允许在下一个操作中执行代码。但这在我的代码中不起作用,有人可以帮助我吗?请纠正我。谢谢。 .vue ..... methods:{ getUserInfo(){
使用 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop 中的视觉表示: setImmediate() 和
我从人们那里得到的印象是...除非与 process.nextTick 一起使用,否则所有 JavaScript 函数都是同步的。什么时候使用它最好? 我想确保我不会在不需要它的地方过度使用它。在这一
无论好坏,我们 stub process.nextTick 以同步调用它的第一个参数(回调)。看代码: global.test_clock = sinon.useFakeTimers(); sinon
我正在尝试测试此 site 中找到的 Yahoo API。但是,我可以获得“请求 token ”,但我似乎不知道如何继续,因为我的应用程序抛出 process.nextTick 错误 此外,如果可能的
我遇到了这个express.js路线,它是 small example in its official repo 的一部分,演示如何处理错误,看看: app.get('/next', function
我是一名优秀的程序员,十分优秀!