@@ -14,10 +14,7 @@ const DEFAULT_INTERVAL = 50
14
14
const DEFAULT_TIMEOUT = 1000
15
15
16
16
function asyncUtils ( act : Act , addResolver : ( callback : ( ) => void ) => void ) : AsyncUtils {
17
- const wait = async (
18
- callback : ( ) => boolean | void ,
19
- { interval = DEFAULT_INTERVAL , timeout = DEFAULT_TIMEOUT } : WaitOptions = { }
20
- ) => {
17
+ const wait = async ( callback : ( ) => boolean | void , { interval, timeout } : WaitOptions ) => {
21
18
const checkResult = ( ) => {
22
19
const callbackResult = callback ( )
23
20
return callbackResult ?? callbackResult === undefined
@@ -38,68 +35,65 @@ function asyncUtils(act: Act, addResolver: (callback: () => void) => void): Asyn
38
35
}
39
36
}
40
37
38
+ let timedOut = false
39
+
41
40
if ( ! checkResult ( ) ) {
42
41
if ( timeout ) {
43
- const timeoutPromise = callAfter ( ( ) => {
44
- throw new TimeoutError ( wait , timeout )
45
- } , timeout )
42
+ const timeoutPromise = ( ) =>
43
+ callAfter ( ( ) => {
44
+ timedOut = true
45
+ } , timeout )
46
46
47
- await act ( ( ) => Promise . race ( [ waitForResult ( ) , timeoutPromise ] ) )
47
+ await act ( ( ) => Promise . race ( [ waitForResult ( ) , timeoutPromise ( ) ] ) )
48
48
} else {
49
49
await act ( waitForResult )
50
50
}
51
51
}
52
+
53
+ return ! timedOut
52
54
}
53
55
54
- const waitFor = async ( callback : ( ) => boolean | void , options : WaitForOptions = { } ) => {
56
+ const waitFor = async (
57
+ callback : ( ) => boolean | void ,
58
+ { interval = DEFAULT_INTERVAL , timeout = DEFAULT_TIMEOUT } : WaitForOptions = { }
59
+ ) => {
55
60
const safeCallback = ( ) => {
56
61
try {
57
62
return callback ( )
58
63
} catch ( error : unknown ) {
59
64
return false
60
65
}
61
66
}
62
- try {
63
- await wait ( safeCallback , options )
64
- } catch ( error : unknown ) {
65
- if ( error instanceof TimeoutError ) {
66
- throw new TimeoutError ( waitFor , error . timeout )
67
- }
68
- throw error
67
+
68
+ const result = await wait ( safeCallback , { interval, timeout } )
69
+ if ( ! result && timeout ) {
70
+ throw new TimeoutError ( waitFor , timeout )
69
71
}
70
72
}
71
73
72
74
const waitForValueToChange = async (
73
75
selector : ( ) => unknown ,
74
- options : WaitForValueToChangeOptions = { }
76
+ { interval = DEFAULT_INTERVAL , timeout = DEFAULT_TIMEOUT } : WaitForValueToChangeOptions = { }
75
77
) => {
76
78
const initialValue = selector ( )
77
- try {
78
- await wait ( ( ) => selector ( ) !== initialValue , options )
79
- } catch ( error : unknown ) {
80
- if ( error instanceof TimeoutError ) {
81
- throw new TimeoutError ( waitForValueToChange , error . timeout )
82
- }
83
- throw error
79
+
80
+ const result = await wait ( ( ) => selector ( ) !== initialValue , { interval, timeout } )
81
+ if ( ! result && timeout ) {
82
+ throw new TimeoutError ( waitForValueToChange , timeout )
84
83
}
85
84
}
86
85
87
- const waitForNextUpdate = async ( options : WaitForNextUpdateOptions = { } ) => {
86
+ const waitForNextUpdate = async ( {
87
+ timeout = DEFAULT_TIMEOUT
88
+ } : WaitForNextUpdateOptions = { } ) => {
88
89
let updated = false
89
90
addResolver ( ( ) => {
90
91
updated = true
91
92
} )
92
93
93
- try {
94
- await wait ( ( ) => updated , {
95
- interval : false ,
96
- ...options
97
- } )
98
- } catch ( error : unknown ) {
99
- if ( error instanceof TimeoutError ) {
100
- throw new TimeoutError ( waitForNextUpdate , error . timeout )
101
- }
102
- throw error
94
+ const result = await wait ( ( ) => updated , { interval : false , timeout } )
95
+ if ( ! result && timeout ) {
96
+ throw new TimeoutError ( waitForNextUpdate , timeout )
103
97
}
104
98
}
105
99
0 commit comments