60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
|
'use strict';
|
||
|
const common = require('../common');
|
||
|
const assert = require('assert');
|
||
|
const { promiseHooks } = require('v8');
|
||
|
|
||
|
assert.throws(() => {
|
||
|
promiseHooks.onSettled(async function() { });
|
||
|
}, /The "settledHook" argument must be of type function/);
|
||
|
|
||
|
assert.throws(() => {
|
||
|
promiseHooks.onSettled(async function*() { });
|
||
|
}, /The "settledHook" argument must be of type function/);
|
||
|
|
||
|
let seen;
|
||
|
|
||
|
const stop = promiseHooks.onSettled(common.mustCall((promise) => {
|
||
|
seen = promise;
|
||
|
}, 4));
|
||
|
|
||
|
// Constructor resolve triggers hook
|
||
|
const promise = new Promise((resolve, reject) => {
|
||
|
assert.strictEqual(seen, undefined);
|
||
|
setImmediate(() => {
|
||
|
resolve();
|
||
|
assert.strictEqual(seen, promise);
|
||
|
seen = undefined;
|
||
|
|
||
|
constructorReject();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Constructor reject triggers hook
|
||
|
function constructorReject() {
|
||
|
const promise = new Promise((resolve, reject) => {
|
||
|
assert.strictEqual(seen, undefined);
|
||
|
setImmediate(() => {
|
||
|
reject();
|
||
|
assert.strictEqual(seen, promise);
|
||
|
seen = undefined;
|
||
|
|
||
|
simpleResolveReject();
|
||
|
});
|
||
|
});
|
||
|
promise.catch(() => {});
|
||
|
}
|
||
|
|
||
|
// Sync resolve/reject helpers trigger hook
|
||
|
function simpleResolveReject() {
|
||
|
const resolved = Promise.resolve();
|
||
|
assert.strictEqual(seen, resolved);
|
||
|
seen = undefined;
|
||
|
|
||
|
const rejected = Promise.reject();
|
||
|
assert.strictEqual(seen, rejected);
|
||
|
seen = undefined;
|
||
|
|
||
|
stop();
|
||
|
rejected.catch(() => {});
|
||
|
}
|