mirror of
https://github.com/nodejs/node.git
synced 2025-05-20 02:55:51 +00:00

Native side of fast-path promise hook was not calling JS fastPromiseHook function when there were no async ids previously assigned to the promise. Because of that already created promises could not get id assigned in situations when an async hook without a before listener function is enabled after their creation. As the result executionAsyncId could return wrong id when called within promise's .then(). Refs: https://github.com/nodejs/node/pull/34512 PR-URL: https://github.com/nodejs/node/pull/34548 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
26 lines
698 B
JavaScript
26 lines
698 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const async_hooks = require('async_hooks');
|
|
|
|
// This test ensures that fast-path PromiseHook assigns async ids
|
|
// to already created promises when the native hook function is
|
|
// triggered on before event.
|
|
|
|
let initialAsyncId;
|
|
const promise = new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
initialAsyncId = async_hooks.executionAsyncId();
|
|
async_hooks.createHook({
|
|
after: common.mustCall(() => {}, 2)
|
|
}).enable();
|
|
resolve();
|
|
}, 0);
|
|
});
|
|
|
|
promise.then(common.mustCall(() => {
|
|
const id = async_hooks.executionAsyncId();
|
|
assert.notStrictEqual(id, initialAsyncId);
|
|
assert.ok(id > 0);
|
|
}));
|