Nodejs有一个方法process.nextTick(fn)
,它将函数的执行延迟到下一个滴答。根据{{3}},这可以用于在像这样的对象的构造函数中发出事件(从artice复制):
function StreamLibrary(resourceName) {
var self = this;
process.nextTick(function() {
self.emit('start');
});
}
var stream = new StreamLibrary('fooResource');
stream.on('start', function() {
console.log('Reading has started');
});
如果没有process.nextTick
,这将不起作用,因为事件将在您有机会收听事件之前发出。但是,如何在添加事件侦听器之前确定不会发出事件?如果它完全异步,则有可能在构造函数结束之前执行下一个tick,因此忽略事件侦听器。那么这个过程背后的规则是什么?节点何时执行nextTick?
答案 0 :(得分:3)
下一个勾选执行...下一个勾选。我认为这里的混淆是“完全异步”的意思。
使用Node.js,您的所有代码都在一个线程上运行。在当前刻度结束之前,不会执行下一个计划的代码。
因此,当您从构造函数中的下一个tick发出事件时,可能附加处理程序的代码将在下一个tick发生之前完成执行。
Node的异步和多线程部分具有处理操作,如网络和IO。这些函数调用在JavaScript代码运行时运行,但是当数据传递回代码时,它将在下一个滴答之前运行。