1

Nodejs 有一种方法process.nextTick(fn)可以将函数的执行延迟到下一个刻度。根据这篇文章,这可用于在这样的对象的构造函数中发出事件(从 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这个是行不通的,因为在你有机会监听事件之前事件就已经发出了。但是,如何确定在添加事件侦听器之前不会发出事件?如果它是完全异步的,则有可能在构造函数结束之前执行下一个刻度,因此忽略事件侦听器。那么这个过程背后的规则是什么?node什么时候执行nextTick?

4

1 回答 1

3

下一个刻度在……下一个刻度上执行。我认为这里的混乱就是你所说的“完全异步”。

使用 Node.js,您的所有代码都在单个线程上运行。在当前刻度完成之前,不会执行为下一个刻度安排的代码。

因此,当您从构造函数中的下一个滴答声发出事件时,可能附加处理程序的代码将在下一个滴答声发生之前全部执行完毕。

Node的异步和多线程部分是处理网络和IO等操作。这些函数调用在您的 JavaScript 代码运行时运行,但是当数据传回您的代码时,它不会运行,直到下一个滴答声。

于 2012-09-09T19:57:50.770 回答