@@ -39,6 +39,8 @@ const {
39
39
} = require ( 'internal/errors' ) . codes ;
40
40
const FixedQueue = require ( 'internal/fixed_queue' ) ;
41
41
42
+ const { AsyncResource } = require ( 'async_hooks' ) ;
43
+
42
44
// *Must* match Environment::TickInfo::Fields in src/env.h.
43
45
const kHasTickScheduled = 0 ;
44
46
@@ -132,16 +134,6 @@ function nextTick(callback) {
132
134
queue . push ( tickObject ) ;
133
135
}
134
136
135
- let AsyncResource ;
136
- const defaultMicrotaskResourceOpts = { requireManualDestroy : true } ;
137
- function createMicrotaskResource ( ) {
138
- // Lazy load the async_hooks module
139
- if ( AsyncResource === undefined ) {
140
- AsyncResource = require ( 'async_hooks' ) . AsyncResource ;
141
- }
142
- return new AsyncResource ( 'Microtask' , defaultMicrotaskResourceOpts ) ;
143
- }
144
-
145
137
function runMicrotask ( ) {
146
138
this . runInAsyncScope ( ( ) => {
147
139
const callback = this . callback ;
@@ -153,12 +145,17 @@ function runMicrotask() {
153
145
} ) ;
154
146
}
155
147
148
+ const defaultMicrotaskResourceOpts = { requireManualDestroy : true } ;
149
+
156
150
function queueMicrotask ( callback ) {
157
151
if ( typeof callback !== 'function' ) {
158
152
throw new ERR_INVALID_ARG_TYPE ( 'callback' , 'function' , callback ) ;
159
153
}
160
154
161
- const asyncResource = createMicrotaskResource ( ) ;
155
+ const asyncResource = new AsyncResource (
156
+ 'Microtask' ,
157
+ defaultMicrotaskResourceOpts
158
+ ) ;
162
159
asyncResource . callback = callback ;
163
160
164
161
enqueueMicrotask ( FunctionPrototypeBind ( runMicrotask , asyncResource ) ) ;
0 commit comments