systemquery/src/static/js/misc/events.mjs

23 lines
626 B
JavaScript

"use strict";
function once(event_emitter, event_name, abort_signal = null) {
return new Promise((resolve, reject) => {
let options = {
once: true
};
if(abort_signal !== null) options.signal = abort_signal;
let resolve_handler = function() {
event_emitter.removeEventListener("error", reject);
abort_signal.removeEventListener("abort", resolve_handler);
resolve(...arguments);
};
abort_signal.addEventListener("abort", resolve_handler);
event_emitter.addEventListener("error", reject, options);
event_emitter.addEventListener(event_name, resolve_handler, options);
});
}
export { once };