Closed
Description
Version
>= 18.0.0
Platform
Linux 5.10.9-051009-generic #202101191835 SMP Tue Jan 19 19:17:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Subsystem
Linux Mint
What steps will reproduce the bug?
const { AsyncLocalStorage } = require("async_hooks");
const { setTimeout } = require("timers/promises");
const als = new AsyncLocalStorage();
function runIssue() {
als.run("contextualized", () => {
syncStep();
asyncStep();
});
console.log(`Out: ${als.getStore()}`);
}
function syncStep() {
console.log(`Sync step: ${als.getStore()}`);
}
async function asyncStep() {
console.log(`Before async ${als.getStore()}`);
await setTimeout(1);
// using not-promised setTimeout works as expected
// setTimeout(() => {
// console.log(`After async ${als.getStore()}`);
// }, 1);
console.log(`After async ${als.getStore()}`);
}
runIssue();
How often does it reproduce? Is there a required condition?
Doing several tests I could say it's always reproducible attaching a debugger
What is the expected behavior?
Expected output:
Sync step: contextualized
Before async contextualized
Out: undefined
After async contextualized
What do you see instead?
Output attaching a debugger (using vscode or chrome devtools):
Debugger attached.
Sync step: contextualized
Before async contextualized
Out: undefined
After async undefined
Waiting for the debugger to disconnect...
Additional information
The issue has been introduced between 17.9.0
(it works as expected) and 18.0.0
(it doesn't work, neither 18.1.0
or 18.2.0
)