Skip to content

Commit 313477d

Browse files
Akryumantfu
andauthored
feat(createEventHook): allow awaiting on trigger (#2824)
Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
1 parent 21536a2 commit 313477d

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

packages/shared/createEventHook/index.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,31 @@ describe('createEventHook', () => {
5555
expect(listener).toHaveBeenCalledTimes(2)
5656
})
5757

58+
it('should await trigger', async () => {
59+
let message = ''
60+
61+
const myFunction = () => {
62+
const resultEvent = createEventHook<string>()
63+
const exec = () => resultEvent.trigger('Hello World')
64+
return {
65+
exec,
66+
onResult: resultEvent.on,
67+
}
68+
}
69+
70+
const { exec, onResult } = myFunction()
71+
onResult(result => new Promise<number>((resolve) => {
72+
setTimeout(() => {
73+
message = result
74+
resolve(2)
75+
}, 100)
76+
}))
77+
const result = await exec()
78+
79+
expect(message).toBe('Hello World')
80+
expect(result).toEqual([2])
81+
})
82+
5883
it('the same listener should fire only once', () => {
5984
const listener = vitest.fn()
6085
const { on, trigger, off } = createEventHook<string>()

packages/shared/createEventHook/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { tryOnScopeDispose } from '../tryOnScopeDispose'
66

77
export type EventHookOn<T = any> = (fn: (param: T) => void) => { off: () => void }
88
export type EventHookOff<T = any> = (fn: (param: T) => void) => void
9-
export type EventHookTrigger<T = any> = (param: T) => void
9+
export type EventHookTrigger<T = any> = (param: T) => Promise<unknown[]>
1010

1111
export interface EventHook<T = any> {
1212
on: EventHookOn<T>
@@ -38,7 +38,7 @@ export function createEventHook<T = any>(): EventHook<T> {
3838
}
3939

4040
const trigger = (param: T) => {
41-
fns.forEach(fn => fn(param))
41+
return Promise.all(fns.map(fn => fn(param)))
4242
}
4343

4444
return {

0 commit comments

Comments
 (0)