mirror of
https://github.com/zhigang1992/now-deployment.git
synced 2026-06-16 02:34:33 +08:00
21 lines
507 B
TypeScript
21 lines
507 B
TypeScript
import { EventEmitter } from 'events';
|
|
|
|
export function once<T>(emitter: EventEmitter, name: string): Promise<T> {
|
|
return new Promise((resolve, reject) => {
|
|
function cleanup() {
|
|
emitter.removeListener(name, onEvent);
|
|
emitter.removeListener('error', onError);
|
|
}
|
|
function onEvent(arg: T) {
|
|
cleanup();
|
|
resolve(arg);
|
|
}
|
|
function onError(err: Error) {
|
|
cleanup();
|
|
reject(err);
|
|
}
|
|
emitter.on(name, onEvent);
|
|
emitter.on('error', onError);
|
|
});
|
|
}
|