Nodejs 有一个方法process.nextTick(fn)
,它将函数的执行延迟到下一个时钟周期。根据this article这可用于在对象的构造函数中发出事件,如下所示(从文章复制):
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?
下一个价格变动将在...下一个价格变动执行。我认为这里的困惑在于“完全异步”的含义。
使用 Node.js,所有代码都在单个线程上运行。在当前tick完成之前,不会执行为下一个tick安排的任何代码。
因此,当您在构造函数中从下一个刻度发出事件时,可能附加处理程序的代码将在下一个刻度发生之前完成执行。
Node的异步和多线程部分是处理网络和IO等操作。这些函数调用在您的 JavaScript 代码运行时运行,但是当数据传回您的代码时,它直到下一个时钟周期才会运行。
我是一名优秀的程序员,十分优秀!