File size: 622 Bytes
9ada4bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { Emitter, EventMap } from 'strict-event-emitter'

/**
 * Emits an event on the given emitter but executes
 * the listeners sequentially. This accounts for asynchronous
 * listeners (e.g. those having "sleep" and handling the request).
 */
export async function emitAsync<
  Events extends EventMap,
  EventName extends keyof Events
>(
  emitter: Emitter<Events>,
  eventName: EventName,
  ...data: Events[EventName]
): Promise<void> {
  const listners = emitter.listeners(eventName)

  if (listners.length === 0) {
    return
  }

  for (const listener of listners) {
    await listener.apply(emitter, data)
  }
}