2014-07-21 1 views
0

Node.js의 이벤트 응용 프로그램을 이해하는 데 약간의 문제가 있습니다. 다음과 같은 표준 사용자 정의 EventEmitter 구현을 고려하십시오.Node.js events applications

var EventEmitter = require('events').EventEmitter; 
var util = require('util'); 

function SimpleEE() { 
    var self = this; 
    self.val = false; 
    EventEmitter.call(this); 
} 

util.inherits(SimpleEE, EventEmitter); 

SimpleEE.prototype.changeVal = function() { 
    self.val = !self.val; 
    self.emit('valChanged', self.val); 
} 

SimpleEE.on('valChanged', function(newVal) { 
    console.log('val was changed to ' + newVal); 
}); 

이 경우에는 수신기가있는 지점이 표시되지 않습니다. 이벤트가 발생할 때마다 동일한 액션이 수행되기를 원한다면 emit() 호출 대신 리스너의 콜백 함수를 사용하지 않는 것이 좋습니다.

원래 혼란스러운 이유는 원래 이벤트가 모듈 간 통신을위한 것이라고 생각했기 때문입니다. 즉 적절한 동작이 다른 모듈에서 발생하면 하나의 모듈에 경고가 표시됩니다. 그러나, 내 이해에서 에미 터와 리스너가 작동하려면 동일한 EventEmitter 인스턴스 아래에 등록되어야합니다.

이해해 주셔서 감사합니다.

답변

1

크로스 모듈을 사용하려면 클래스를 내보내고 외부에서 intance를 만들어야합니다. 예를 들어

module.exports = SimpleEE 
외부

SimpleEE = require("yourModule") 
var instance = new SimpleEE() 
instance.on("valChanged",function(){}) 
instance.changeVal("22"); 

또는 사용자가 만든 내보낼 있도록 singleTone을 만들

SimpleEE = require("yourModule") 

SimpleEE.on("valChanged",function(){}) 
SimpleEE.changeVal("22"); 

module.exports = new SimpleEE() 

외부 예는 정보 AB를 얻기 위해 여기 How do you share an EventEmitter in node.js?을 100g을 할 수 있습니다 글로벌 이벤트를 시작하고 청취하십시오.