23 lines
626 B
JavaScript
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 };
|