express-dom
Version:
Prepare, render web pages - express middleware
22 lines (19 loc) • 569 B
JavaScript
const assert = require('node:assert');
module.exports = function asyncEmitter(emitter, event, ...args) {
// breaks synchronous contract of emit()
// returns a promise or false
assert.equal(
typeof emitter.emit, "function", "wrong type for emit()"
);
assert.equal(
typeof emitter.listeners, "function", "wrong type for listeners()"
);
const list = emitter.listeners(event);
if (list.length == 0) return false;
args.unshift(event);
let ret = Promise.resolve();
for (const fn of list) {
ret = ret.then(() => fn.apply(emitter, args));
}
return ret;
};