mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
8f39881b74
Use `PromiseWrap` resource objects whose lifetimes are tied to the `Promise` instances themselves to track promises, and have a `.promise` getter that points to the `Promise` and a `.parent` property that points to the parent Promise’s resource object, if there is any. The properties are implemented as getters for internal fields rather than normal properties in the hope that it helps keep performance for the common case that async_hooks users will often not inspect them. PR-URL: https://github.com/nodejs/node/pull/13452 Reviewed-By: Andreas Madsen <amwebdk@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com>
24 lines
766 B
JavaScript
24 lines
766 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const async_hooks = require('async_hooks');
|
|
|
|
const initCalls = [];
|
|
|
|
async_hooks.createHook({
|
|
init: common.mustCall((id, type, triggerId, resource) => {
|
|
assert.strictEqual(type, 'PROMISE');
|
|
initCalls.push({id, triggerId, resource});
|
|
}, 2)
|
|
}).enable();
|
|
|
|
const a = Promise.resolve(42);
|
|
const b = a.then(common.mustCall());
|
|
|
|
assert.strictEqual(initCalls[0].triggerId, 1);
|
|
assert.strictEqual(initCalls[0].resource.parentId, undefined);
|
|
assert.strictEqual(initCalls[0].resource.promise, a);
|
|
assert.strictEqual(initCalls[1].triggerId, initCalls[0].id);
|
|
assert.strictEqual(initCalls[1].resource.parentId, initCalls[0].id);
|
|
assert.strictEqual(initCalls[1].resource.promise, b);
|