'use strict'; const common = require('../common.js'); const { createHook } = require('async_hooks'); let hook; const tests = { disabled() { hook = createHook({ promiseResolve() {} }); }, enabled() { hook = createHook({ promiseResolve() {} }).enable(); }, enabledWithDestroy() { hook = createHook({ promiseResolve() {}, destroy() {} }).enable(); }, enabledWithInitOnly() { hook = createHook({ init() {} }).enable(); } }; const bench = common.createBenchmark(main, { n: [1e6], asyncHooks: [ 'enabled', 'enabledWithDestroy', 'enabledWithInitOnly', 'disabled', ] }); const err = new Error('foobar'); async function run(n) { for (let i = 0; i < n; i++) { await new Promise((resolve) => resolve()) .then(() => { throw err; }) .catch((e) => e); } } function main({ n, asyncHooks }) { if (hook) hook.disable(); tests[asyncHooks](); bench.start(); run(n).then(() => { bench.end(n); }); }