2 つの .js ファイルがあります。1 つはイベントを発行し、もう 1 つはイベントをリッスンします。コードは以下のようになります。
エミッター
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がスクリプトを終了させないため、機能します。しかし、より良い組織のためにそれらを別々に保ちたい.