2017-11-02 15 views
0

현재 ES6 클래스를 사용하고 있습니다. 시나리오에서 하나가 메시지를 내보내 인스턴스 변수 내에서 값을 보낸 다음 방출 후 변수를 재설정해야합니다.노드에서 메시지를 보낸 직후에 변수를 재설정하는 가장 좋은 방법은 무엇입니까

은 그래서 같이 보입니다 다음 (의도,하지만 그렇게 더 적절한 방법을 찾고으로 작동) :

// in class Ace 
this.emit('someEvent', this.storage,() => { 
    this.storage = {}; 
}); 

// in class Bay 
// Assuming `this.instanceAce` is an instance of class Ace 
this.instanceAce.on('someEvent', (data, cb) => { 
    // do stuff with data 
    cb(); 
} 

이 작동하지만 이벤트 리스너에 콜백을 제공하는 아이디어 이상한. 이것은 내가이 이벤트에 대해 정확히 하나의 청취자를 가졌다 고 가정하고 있습니다 (현재는 사실입니다).하지만 하나 이상의 청취자가있을 수있는 시나리오에서는 어떻게됩니까?

이 솔루션에 대한 대안이 있습니까? 일종의 이벤트 모델의 목적을 무시하는 것 같지 않은 뭔가?

답변

1

그것은 당신이해야 할 노력하고 있지만, 그냥 어떤 경쟁 조건을 피하기 위해 .emit()에서 메시지를 얻을 수 있습니다 청취자의 이전 this.storage을 취소하려는 경우, 당신이 할 수있는 정확히 분명하지 않다 :

// Send storage and re-initialize the storage once we've captured it for sending 
let temp = this.storage; 
this.storage = {}; 
this.emit('someEvent', temp); 

참고 : 일반 EventEmitter 개체는 사용중인 콜백을 지원하지 않습니다. 해당 모델을 지원하는 EventEmitter의 일부 확장이 있지만 기본은 EventEmitter이 아니며 here in the doc을 볼 수 있습니다. 우리가 사용하는 정확한 객체 (분명히 그러한 콜백을 지원하는 객체)를 알면 더 잘 당신을 도울 수 있습니다.