The createEmitter function should create a new EventEmitter and register "open" and "close" event listeners. The callbacks for those events should be onOpen and onClose arguments, respectively. The opened and closed methods should raise the "open" and "close" events on the EventEmitter they will receive as emitter arguments. The callbacks should only be invoked once per emitter.
For example, after executing the following code, it should print "Opened!" and then "Closed!":
let emitter = createEmitter(
() => console.log("Opened!"), () => console.log("Closed!")
);
opened(emitter);
closed(emitter);
My Code:
const events = require("events");
const myEmitter = new events.EventEmitter();
function createEmitter(onOpen, onClose) {
myEmitter.on('open', onOpen);
myEmitter.on('close', onClose);
}
function opened(emitter) {
myEmitter.emit('open', emitter);
}
function closed(emitter) {
myEmitter.emit('close', emitter);
}
let emitter = createEmitter(
() => console.log("Opened!"), () => console.log("Closed!")
);
opened(emitter);
closed(emitter);
module.exports.createEmitter = createEmitter;
module.exports.opened = opened;
module.exports.closed = closed;
Output:
Opened!
Closed!
Test Cases:
OK: Example case: Correct answer
WRONG: createEmitter registers the correct events: Exception
OK: open and close functions raise the correct events: Correct answer
WRONG: Callbacks are only invoked once: Wrong answer
Could Anyone explain why the Wrong Answer and the Exception?
I assume that the problem is that your createEmitter
function doesn't create an emitter, but adds events to a pre-created one. Try it like this:
const EventEmitter = require("events"); //events.EventEmitter is just a self reference
function createEmitter(onOpen, onClose) {
const myEmitter = new EventEmitter()
myEmitter.on('open', onOpen);
myEmitter.on('close', onClose);
return myEmitter; //This is important
}
function opened(emitter) {
emitter.emit('open');
}
function closed(emitter) {
emitter.emit('close');
}
let emitter = createEmitter(
() => console.log("Opened!"), () => console.log("Closed!")
);
opened(emitter);
closed(emitter);
module.exports.createEmitter = createEmitter;
module.exports.opened = opened;
module.exports.closed = closed;