我有两个.js文件。一个发出事件,另一个发现它。代码如下所示。
发射极
var EventEmitter = require('events').EventEmitter;
utils.inherits(ConfigFileManager, EventEmitter);
var manager = new ConfigFileManager();
var watcher = chokidar.watch(CONFIG_DIR, {persistent: true});
watcher.on('add', function (path) {
manager.emit('monitor', 'print this data');
});
watcher.on('change', function (path) {
console.log('change event fired');
manager.emit('monitor', 'print this data');
});
module.exports = manager;
chokidar.watch保留事件队列并限制节点退出。现在,监听器位于不同的文件中,如下所示。
监听
var manager = require('./emitter');
manager.on('monitor', function(data) {
console.log(data);
});
我运行“node listener.js”。第一次“添加”事件会调用侦听器,一切都很好。但是,当我更改文件时,会发出事件,但是侦听器永远不会获取它。如果我在listener.js的末尾添加一个setTimeout,则侦听器将获取事件,直到超时到期。因此,一旦侦听器脚本完成,就不会收到事件。如何让听众永远倾听?
另外,如果我将侦听器代码也保留在emitter.js中,那么它可以工作,因为chokidar.watch会阻止脚本终止。但是,我希望将它们分开以便更好地组织。