export function onceEvent()

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);
    });
  });
}