callback, args }; if (initHooksExist()) emitInit(asyncId, 'TickObject', triggerAsyncId, tickObject); queue.push(tickObject); } function runMicrotask() { this.runInAsyncScope(() => { const callback = this.callback; try { callback(); } finally { this.emitDestroy(); } }); } const defaultMicrotaskResourceOpts = { requireManualDestroy: true }; function queueMicrotask(callback) { validateFunction(callback, 'callback'); const asyncResource = new AsyncResource( 'Microtask', defaultMicrotaskResourceOpts ); asyncResource.callback = callback; enqueueMicrotask(FunctionPrototypeBind(runMicrotask, asyncResource)); } module.exports = { setupTaskQueue() { // Sets the per-isolate promise rejection callback listenForRejections(); // Sets the callback to be run in every tick. setTickCallback(processTicksAndRejections); return { nextTick, runNextTicks }; }, queueMicrotask };