Node.js Nodejs:勾号什么时候执行

Node.js Nodejs:勾号什么时候执行,node.js,asynchronous,Node.js,Asynchronous,Nodejs有一个方法process.nextTick(fn),它将函数的执行延迟到下一个滴答声。根据这一点,可以用来在对象的构造函数中发出这样的事件(从文章中复制): 如果没有process.nextTick,这将不起作用,因为事件将在您有机会侦听事件之前发出。但是,在添加事件侦听器之前,如何确保不会发出事件?如果它是完全异步的,那么有可能在构造函数结束之前执行下一个勾号,因此忽略事件侦听器。那么,这一过程背后的规则是什么?节点什么时候执行下一次检查 下一个勾号在。。。下一个滴答声。我认为这里

Nodejs有一个方法
process.nextTick(fn)
,它将函数的执行延迟到下一个滴答声。根据这一点,可以用来在对象的构造函数中发出这样的事件(从文章中复制):


如果没有
process.nextTick
,这将不起作用,因为事件将在您有机会侦听事件之前发出。但是,在添加事件侦听器之前,如何确保不会发出事件?如果它是完全异步的,那么有可能在构造函数结束之前执行下一个勾号,因此忽略事件侦听器。那么,这一过程背后的规则是什么?节点什么时候执行下一次检查

下一个勾号在。。。下一个滴答声。我认为这里的混乱就是你所说的“完全异步”的意思

使用Node.js,所有代码都在单个线程上运行。在当前勾号完成之前,不会执行为下一个勾号计划的代码

因此,当您从构造函数中的下一个勾号发出事件时,可能附加处理程序的代码将在下一个勾号出现之前全部完成执行

节点的异步和多线程部分负责处理网络和IO等操作。这些函数调用在JavaScript代码运行时运行,但当数据传递回代码时,它将在下一个滴答声之前不会运行

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');
});