in src/util.ts [174:193]
export function onceEvent(emitter: EventEmitter, ...events: string[]): Promise<any> {
return new Promise((resolve, reject) => {
const teardown: (() => void)[] = [];
const handler = (data: any, event: string) => {
teardown.forEach(t => t());
if (event === 'error') {
reject(data);
} else {
resolve(data);
}
};
events.forEach(event => {
const fn = (data: any) => handler(data, event);
teardown.push(() => emitter.removeListener(event, fn));
emitter.once(event, fn);
});
});
}