4

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がスクリプトを終了させないため、機能します。しかし、より良い組織のためにそれらを別々に保ちたい.

4

0 に答える 0