이벤트 처리기의 반환 값은 완전히 무시됩니다. the documentation에서 :
EventEmitter
객체가 이벤트를 방출, 특정 이벤트에 연결된 모든 기능은 기적이라고합니다. 호출 된 리스너가 리턴 한 값은 무시되고 무시됩니다.
그러나 방출되는 대신 오브젝트를하고 콜백 해당 개체의 상태를 수정할 수 있습니다 무엇을 :
const EventEmitter = require("events").EventEmitter;
const emitter = new EventEmitter();
emitter.on("sayHello", function(e) {
e.message += " World"; // Modifying the state
});
const e = {message: "Hello"};
emitter.emit("sayHello", e);
console.log(e.message); // "Hello World"
이 이
은 (또한 EventEmitter
의 인스턴스를 생성하여 변경 사항을주의
, 원래의 코드가 시도 EventEmitter
자체에 on
을 사용하지만 하나가되지 않습니다.) 당신은 코멘트에 말한
이 요 자신의 단계로 객체를 생성하지 않아도되고 싶습니다.
이
class MyEventEmitter extends EventEmitter {
emitObject(event, obj = {}) {
this.emit(event, obj);
return obj;
}
}
사용법 : 내가 거기에 두 번째 인수에 대한 객체를 제공 한
const emitter = new MyEventEmitter();
emitter.on("sayHello", function(e) {
e.message += " World";
});
const evt = emitter.emitObject("sayHello", {message: "Hello"});
console.log(evt.message); // "Hello World"
는 (그래서 우리가 할 수있는 "Hello" + " World"
당신은 쉽게 자신의 emitObject
(또는 무엇이든) 기능을 추가 할 수 EventEmitter
을 하위 클래스 당신이 그것을 버리면 빈 객체가 기본값으로 설정됩니다 (ES2015 기본 인수).
전체 예제 :
const EventEmitter = require("events").EventEmitter;
class MyEventEmitter extends EventEmitter {
emitObject(event, obj = {}) {
this.emit(event, obj);
return obj;
}
}
const emitter = new MyEventEmitter();
emitter.on("sayHello", function(e) {
e.message += " World";
});
const evt = emitter.emitObject("sayHello", {message: "Hello"});
console.log(evt.message); // "Hello World"
@PavelGatnar 감사합니다. 하지만 수정 된 값을 반환해야합니다. –