frontity
Version:
Frontity cli and entry point to other packages
47 lines (42 loc) • 1.16 kB
text/typescript
import { EventEmitter } from "events";
export class EventPromised<Events> extends Promise<any> {
private emitter: EventEmitter;
constructor(
executor: (
resolve: (value?: any | PromiseLike<any>) => void,
reject: (reason?: any) => void,
emit: (event: Events, ...args: any[]) => void
) => void,
emitter: EventEmitter = new EventEmitter()
) {
executor = executor == undefined ? () => undefined : executor;
super((resolve, reject) =>
executor(
(result) => {
emitter.removeAllListeners();
resolve(result);
},
(error) => {
emitter.removeAllListeners();
reject(error);
},
emitter.emit.bind(emitter)
)
);
this.emitter = emitter;
}
public on(
eventName: Events extends string ? Events : string | symbol,
onData: (...data: any[]) => void
): this {
this.emitter.on(eventName, onData);
return this;
}
public once(
eventName: Events extends string ? Events : string | symbol,
onData: (...data: any[]) => void
): this {
this.emitter.once(eventName, onData);
return this;
}
}