我是JavaScript和NodeJS的新手,我只是想了解NodeJS中的发射器模式。当我尝试每秒发出一个tick事件时,使用setInterval函数,该程序似乎工作正常: -
var util = require('util'),
EventEmitter = require('events').EventEmitter;
var Ticker = function() {
var self = this;
setInterval(function() {
self.emit('tick');
}, 1000);
};
util.inherits(Ticker, EventEmitter)
var ticker = new Ticker();
ticker.on('tick', function() {
console.log('TICK');
});
但是,当我尝试不使用setInterval方法发出事件时,我的事件没有被调用: -
var util = require('util'),
EventEmitter = require('events').EventEmitter;
var Ticker = function() {
var self = this;
self.emit('tick');
};
util.inherits(Ticker, EventEmitter)
var ticker = new Ticker();
ticker.on('tick', function() {
console.log('TICK');
});
请帮助,我不明白,我错了... 据我所知,当调用self.emit时,ticker.on未注册,因此错过了事件。如果是这种情况,如何在创建对象时发出事件。
答案 0 :(得分:0)
JavaScript是一种(主要是*)同步语言,除非另有说明,代码从上到下运行,只有异步事件排队等待以后。
如果没有setInterval将emit()
排队等待以后,你可以这样:
create Ticker
Ticker.emit()
Ticker.on(...)
基本上,.emit()
同步发生,并且在第一次调用.on()
之前发生。
*主要是因为在ES2015中我们有Promises,它是用于描述异步事物的语言级构造,但对于您正在观察的问题并不重要。