events-helpers.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { EventEmitter } from "electron";
  2. /**
  3. * @fileoverview A set of helper functions to make it easier to work
  4. * with events in async/await manner.
  5. */
  6. /**
  7. * @param {!EventTarget} target
  8. * @param {string} eventName
  9. * @return {!Promise<!Event>}
  10. */
  11. export const waitForEvent = (target: EventTarget, eventName: string) => {
  12. return new Promise(resolve => {
  13. target.addEventListener(eventName, resolve, { once: true })
  14. })
  15. }
  16. /**
  17. * @param {!EventEmitter} emitter
  18. * @param {string} eventName
  19. * @return {!Promise<!Array>} With Event as the first item.
  20. */
  21. export const emittedOnce = (emitter: EventEmitter, eventName: string) => {
  22. return emittedNTimes(emitter, eventName, 1).then(([result]) => result)
  23. }
  24. export const emittedNTimes = (emitter: EventEmitter, eventName: string, times: number) => {
  25. const events: any[][] = []
  26. return new Promise<any[][]>(resolve => {
  27. const handler = (...args: any[]) => {
  28. events.push(args)
  29. if (events.length === times) {
  30. emitter.removeListener(eventName, handler)
  31. resolve(events)
  32. }
  33. }
  34. emitter.on(eventName, handler)
  35. })
  36. }