@@ -24,7 +24,6 @@ const {
24
24
AbortError,
25
25
codes : {
26
26
ERR_ILLEGAL_CONSTRUCTOR ,
27
- ERR_INVALID_ARG_TYPE ,
28
27
ERR_INVALID_THIS ,
29
28
} ,
30
29
} = require ( 'internal/errors' ) ;
@@ -33,6 +32,7 @@ const {
33
32
validateAbortSignal,
34
33
validateBoolean,
35
34
validateObject,
35
+ validateNumber,
36
36
} = require ( 'internal/validators' ) ;
37
37
38
38
const {
@@ -50,34 +50,33 @@ function cancelListenerHandler(clear, reject, signal) {
50
50
}
51
51
52
52
function setTimeout ( after , value , options = kEmptyObject ) {
53
- const args = value !== undefined ? [ value ] : value ;
54
- if ( options == null || typeof options !== 'object' ) {
55
- return PromiseReject (
56
- new ERR_INVALID_ARG_TYPE (
57
- 'options' ,
58
- 'Object' ,
59
- options ) ) ;
60
- }
61
- const { signal, ref = true } = options ;
62
53
try {
63
- validateAbortSignal ( signal , 'options.signal' ) ;
54
+ if ( typeof after !== 'undefined' ) {
55
+ validateNumber ( after , 'delay' ) ;
56
+ }
57
+
58
+ validateObject ( options , 'options' ) ;
59
+
60
+ if ( typeof options ?. signal !== 'undefined' ) {
61
+ validateAbortSignal ( options . signal , 'options.signal' ) ;
62
+ }
63
+
64
+ if ( typeof options ?. ref !== 'undefined' ) {
65
+ validateBoolean ( options . ref , 'options.ref' ) ;
66
+ }
64
67
} catch ( err ) {
65
68
return PromiseReject ( err ) ;
66
69
}
67
- if ( typeof ref !== 'boolean' ) {
68
- return PromiseReject (
69
- new ERR_INVALID_ARG_TYPE (
70
- 'options.ref' ,
71
- 'boolean' ,
72
- ref ) ) ;
73
- }
70
+
71
+ const { signal, ref = true } = options ;
74
72
75
73
if ( signal ?. aborted ) {
76
74
return PromiseReject ( new AbortError ( undefined , { cause : signal . reason } ) ) ;
77
75
}
76
+
78
77
let oncancel ;
79
78
const ret = new Promise ( ( resolve , reject ) => {
80
- const timeout = new Timeout ( resolve , after , args , false , ref ) ;
79
+ const timeout = new Timeout ( resolve , after , [ value ] , false , ref ) ;
81
80
insert ( timeout , timeout . _idleTimeout ) ;
82
81
if ( signal ) {
83
82
oncancel = FunctionPrototypeBind ( cancelListenerHandler ,
@@ -93,30 +92,26 @@ function setTimeout(after, value, options = kEmptyObject) {
93
92
}
94
93
95
94
function setImmediate ( value , options = kEmptyObject ) {
96
- if ( options == null || typeof options !== 'object' ) {
97
- return PromiseReject (
98
- new ERR_INVALID_ARG_TYPE (
99
- 'options' ,
100
- 'Object' ,
101
- options ) ) ;
102
- }
103
- const { signal, ref = true } = options ;
104
95
try {
105
- validateAbortSignal ( signal , 'options.signal' ) ;
96
+ validateObject ( options , 'options' ) ;
97
+
98
+ if ( typeof options ?. signal !== 'undefined' ) {
99
+ validateAbortSignal ( options . signal , 'options.signal' ) ;
100
+ }
101
+
102
+ if ( typeof options ?. ref !== 'undefined' ) {
103
+ validateBoolean ( options . ref , 'options.ref' ) ;
104
+ }
106
105
} catch ( err ) {
107
106
return PromiseReject ( err ) ;
108
107
}
109
- if ( typeof ref !== 'boolean' ) {
110
- return PromiseReject (
111
- new ERR_INVALID_ARG_TYPE (
112
- 'options.ref' ,
113
- 'boolean' ,
114
- ref ) ) ;
115
- }
108
+
109
+ const { signal, ref = true } = options ;
116
110
117
111
if ( signal ?. aborted ) {
118
112
return PromiseReject ( new AbortError ( undefined , { cause : signal . reason } ) ) ;
119
113
}
114
+
120
115
let oncancel ;
121
116
const ret = new Promise ( ( resolve , reject ) => {
122
117
const immediate = new Immediate ( resolve , [ value ] ) ;
@@ -136,13 +131,29 @@ function setImmediate(value, options = kEmptyObject) {
136
131
}
137
132
138
133
async function * setInterval ( after , value , options = kEmptyObject ) {
139
- validateObject ( options , 'options' ) ;
134
+ try {
135
+ if ( typeof after !== 'undefined' ) {
136
+ validateNumber ( after , 'delay' ) ;
137
+ }
138
+
139
+ validateObject ( options , 'options' ) ;
140
+
141
+ if ( typeof options ?. signal !== 'undefined' ) {
142
+ validateAbortSignal ( options . signal , 'options.signal' ) ;
143
+ }
144
+
145
+ if ( typeof options ?. ref !== 'undefined' ) {
146
+ validateBoolean ( options . ref , 'options.ref' ) ;
147
+ }
148
+ } catch ( err ) {
149
+ return PromiseReject ( err ) ;
150
+ }
151
+
140
152
const { signal, ref = true } = options ;
141
- validateAbortSignal ( signal , 'options.signal' ) ;
142
- validateBoolean ( ref , 'options.ref' ) ;
143
153
144
- if ( signal ?. aborted )
154
+ if ( signal ?. aborted ) {
145
155
throw new AbortError ( undefined , { cause : signal ?. reason } ) ;
156
+ }
146
157
147
158
let onCancel ;
148
159
let interval ;
@@ -216,7 +227,7 @@ class Scheduler {
216
227
wait ( delay , options ) {
217
228
if ( ! this [ kScheduler ] )
218
229
throw new ERR_INVALID_THIS ( 'Scheduler' ) ;
219
- return setTimeout ( delay , undefined , { signal : options ?. signal } ) ;
230
+ return setTimeout ( delay , undefined , options ) ;
220
231
}
221
232
}
222
233
0 commit comments