श्रोता को हटाने की संभावना के साथ ईवेंट श्रोता विधि में कक्षा संदर्भ तक पहुंचने का कोई तरीका है?Node.js EventEmitter: ईवेंट श्रोता के लिए क्लास संदर्भ कैसे बाध्य करें और फिर इस श्रोता को हटाएं
उदाहरण 1:
import {EventEmitter} from "events";
export default class EventsExample1 {
private emitter: EventEmitter;
constructor(private text: string) {
this.emitter = new EventEmitter();
this.emitter.addListener("test", this.handleTestEvent);
this.emitter.emit("test");
}
public dispose() {
this.emitter.removeListener("test", this.handleTestEvent);
}
private handleTestEvent() {
console.log(this.text);
}
}
इस उदाहरण श्रोता को दूर करने में काम करता है, लेकिन handleTestEvent()
विधि this
का उपयोग कर वर्ग संदर्भ के लिए पहुँच नहीं है। this
इवेंटइमीटर संदर्भ के लिए अंक, इसलिए this.text
पहुंच योग्य नहीं है।
उदाहरण 2:
import {EventEmitter} from "events";
export default class EventsExample2 {
private emitter: EventEmitter;
constructor(private text: string) {
this.emitter = new EventEmitter();
this.emitter.addListener("test", this.handleTestEvent.bind(this));
this.emitter.emit("test");
}
public dispose() {
this.emitter.removeListener("test", this.handleTestEvent);
}
private handleTestEvent() {
console.log(this.text);
}
}
इस उदाहरण में, मैं bind
समारोह का उपयोग कर रहा घटना श्रोता के लिए वर्ग के संदर्भ बाध्य करने के लिए। अब handleTestEvent
विधि का उपयोग this
=>this.text
का उपयोग कर कक्षा संदर्भ तक पहुंच है, लेकिन श्रोता को removeListener
के साथ हटाया नहीं जा सकता है - ऐसा लगता है कि bind
एक नया अनाम कार्य बनाता है, इसलिए बाध्य श्रोता का कोई संदर्भ नहीं है।
उदाहरण 3:
import {EventEmitter} from "events";
export default class EventsExample3 {
private emitter: EventEmitter;
constructor(private text: string) {
this.emitter = new EventEmitter();
this.emitter.addListener("test",() => this.handleTestEvent());
this.emitter.emit("test");
}
public dispose() {
this.emitter.removeListener("test", this.handleTestEvent);
}
private handleTestEvent() {
console.log(this.text);
}
}
इस उदाहरण में, मैं एक तीर समारोह का उपयोग कर रहा घटना श्रोता में वर्ग के एक संदर्भ को बचाने के लिये। handleTestEvent
विधि this
का उपयोग कर कक्षा संदर्भ तक पहुंच है, लेकिन श्रोता को हटाया नहीं जा सकता है (उदाहरण के लिए बाध्य श्रोता के लिए कोई संदर्भ नहीं है)।
मैं एक वैकल्पिक घटना पुस्तकालय की कोशिश की है - EventEmitter3 जो वर्ग संदर्भ घटनाओं के लिए कस्टम संदर्भ (के लिए एक समर्थन हासिल है addListener
समारोह (this.emitter.addListener("test", this.handleTestEvent, this
), यह पूरी तरह से काम करता है के लिए तीसरे पैरामीटर के रूप में पारित किया जा सकता है, लेकिन मैं नहीं बल्कि उपयोग करना चाहते हैं शामिल EventEmitter Node.js.