Description
Version
16.15.1
Platform
Microsoft Windows NT 10.0.19042.0 x64
Subsystem
No response
What steps will reproduce the bug?
Just run it in the Node.JS <= 18:
(I have tested it on node v14.19.3, v16.15.1, v18.2.0)
test.js
function delay(time) {
return new Promise((resolve) => {
setTimeout(resolve, time)
})
}
async function test() {
for (let i = 0; i < 1000000; i++) {
await new Promise((resolve, reject) => {
reject('value')
})
.then(() => {}, () => {})
// if (i % 10000 === 0) {
// await delay(100)
// }
}
console.log('OK')
const time0 = Date.now()
await delay(0)
console.log('Real delay time: ' + (Date.now() - time0))
}
test()
The test function will generate 1 million of Promise rejections. And after finish it will hang. It seems like the garbage collection called on idle, and it takes very long time.
If you replace the reject
with the resolve
, then everything will work quickly.
You can also uncomment the periodically delay, and it will work quickly.
How often does it reproduce? Is there a required condition?
No response
What is the expected behavior?
No response
What do you see instead?
Work without hungs
Additional information
I can reproduce it in the Chromium 49 but it work correctly in the Chrome latest. It looks like this bug has been fixed in the Chrome.
This bug is easy to work around, but now I have the same bug with 30000 call of worker functions. I can't describe it yet, because I need to research it before. I think maybe the promise rejection bug will expose a wider problem and I won't have to create a new issue.