2017-01-13 19 views
0

1つまたは複数のファイルからイベントを鳴らし、それを聞くための複数の他のファイルを作成します。同じインスタンスを共有する必要があります。私は、コードをテストするにはNode.js:複数のファイル間でオブジェクトを共有する

を行うことを試みた何これは、私は3つのファイル

  1. eventEmitter.jsを持っている - これは新しいEventEmitterオブジェクトを作成し、それを
  2. eventGenerator.jsをエクスポートする - これは、使用してイベントを発しますemitEvent.js
  3. listenEvent.js - これはemitEvent.js
を使用してイベントをlisten

私はrequireeventGenerator.jslistenEvent.sで使用しています。オブジェクトをeventEmitter.jsにエクスポートすると、シングルトンパターンに従って同じインスタンスを共有したいと考えています。

ここにいくつかのリソースがあります投稿する前にチェックアウトしました。 免責事項:テスト用にこれらのファイルからいくつかのデザイン/コードを適用しました。ここで

3つのファイルがあります。

eventEmitter.js

//eventEmitter.js 
var events = require('events'); 
var em = new events.EventEmitter(); 

module.exports.universalEmitter = em; 

eventGenerator.js

//eventGenerator.js 
var eventEMitter = require('./eventEmitter.js'); 
var universalEmitter = eventEmitter.universalEmitter; 

setInterval(function() { 

    universalEmitter.emit('Hello'); 
    console.log("emitting event\n"); 

}, 3000); 

listenEvent.js

//listenEvent.js 
var eventEmitter = require('./eventEmitter.js'); 
var universalEmitter = eventEmitter.universalEmitter; 

universalEmitter.on('Hello',function(){ 
    console.log('received hello\n'); 
}); 

の問題は

  • listenEvent.jsイベントを受信し、すぐに終了しません。
  • 同じファイルを送信して聞いても問題ありません。
  • listenEvent.jseventGenerator.jsは、オブジェクトの異なるインスタンスを持つように見えます。なぜこうなった?

ここには何か些細なことがありますか?

ありがとうございます!

答えて

0

私自身の質問に答える - グローバル変数を使用して別のアプローチで動作させることができました。 私はまだ他のアプローチで問題を理解することができません。ここ は

setInterval(function() { 

     universalEmitter.emit('Hello'); 
     console.log('emitting event\n'); 

}, 2000); 

listenEvent.js

var events = require('events'); 
global.universalEmitter = new events(); 

eventGenerator.js

eventEmitter.js 3つのファイルです

require('./emitEvent'); 
require('./listenEvent'); 

universalEmitter.on('Hello',function(){ 
    console.log('received hello\n'); 
}); 
関連する問題