events-helpers.ts 747 B

123456789101112131415161718192021222324
  1. /**
  2. * @fileoverview A set of helper functions to make it easier to work
  3. * with events in async/await manner.
  4. */
  5. import { on } from 'node:events';
  6. export const emittedNTimes = async (emitter: NodeJS.EventEmitter, eventName: string, times: number, trigger?: () => void) => {
  7. const events: any[][] = [];
  8. const iter = on(emitter, eventName);
  9. if (trigger) await Promise.resolve(trigger());
  10. for await (const args of iter) {
  11. events.push(args);
  12. if (events.length === times) { break; }
  13. }
  14. return events;
  15. };
  16. export const emittedUntil = async (emitter: NodeJS.EventEmitter, eventName: string, untilFn: Function) => {
  17. for await (const args of on(emitter, eventName)) {
  18. if (untilFn(...args)) { return args; }
  19. }
  20. return [];
  21. };