1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const { promiseHooks } = require('v8'); 5 6assert.throws(() => { 7 promiseHooks.onInit(async function() { }); 8}, /The "initHook" argument must be of type function/); 9 10assert.throws(() => { 11 promiseHooks.onInit(async function*() { }); 12}, /The "initHook" argument must be of type function/); 13 14let seenPromise; 15let seenParent; 16 17const stop = promiseHooks.onInit(common.mustCall((promise, parent) => { 18 seenPromise = promise; 19 seenParent = parent; 20}, 2)); 21 22const parent = Promise.resolve(); 23assert.strictEqual(seenPromise, parent); 24assert.strictEqual(seenParent, undefined); 25 26const child = parent.then(); 27assert.strictEqual(seenPromise, child); 28assert.strictEqual(seenParent, parent); 29 30seenPromise = undefined; 31seenParent = undefined; 32 33stop(); 34 35Promise.resolve(); 36assert.strictEqual(seenPromise, undefined); 37assert.strictEqual(seenParent, undefined); 38