You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
"use strict"; |
|
function noop() { } |
|
function once(emitter, name) { |
|
const o = once.spread(emitter, name); |
|
const r = o.then((args) => args[0]); |
|
r.cancel = o.cancel; |
|
return r; |
|
} |
|
(function (once) { |
|
function spread(emitter, name) { |
|
let c = null; |
|
const p = new Promise((resolve, reject) => { |
|
function cancel() { |
|
emitter.removeListener(name, onEvent); |
|
emitter.removeListener('error', onError); |
|
p.cancel = noop; |
|
} |
|
function onEvent(...args) { |
|
cancel(); |
|
resolve(args); |
|
} |
|
function onError(err) { |
|
cancel(); |
|
reject(err); |
|
} |
|
c = cancel; |
|
emitter.on(name, onEvent); |
|
emitter.on('error', onError); |
|
}); |
|
if (!c) { |
|
throw new TypeError('Could not get `cancel()` function'); |
|
} |
|
p.cancel = c; |
|
return p; |
|
} |
|
once.spread = spread; |
|
})(once || (once = {})); |
|
module.exports = once; |
|
//# sourceMappingURL=index.js.map
|