Closed
Description
- Version: 11.1
- Platform: Debian 7
- Subsystem: timers
I have found another strange behavior of timers after refactor in v11. Example:
setTimeout(() => {
console.log('firing', 11000)
}, 11000)
setTimeout(() => {
console.log('firing', 90000)
}, 90000)
setInterval(() => {
console.log('firing', 1000)
}, 1000)
const timer4000 = setTimeout(() => {
console.log('firing', 4000)
}, 4000)
setTimeout(() => {
console.log('firing', 60000)
}, 60000)
setTimeout(() => {
console.log('firing', 100)
const timer1500 = setTimeout(() => {
console.log('firing', 1500)
}, 1500)
clearTimeout(timer1500)
}, 100)
setTimeout(() => {
console.log('firing', 3000)
}, 3000)
clearTimeout(timer4000)
setTimeout(() => {
console.log('firing', 16000)
}, 16000)
It is a bit complicated, but when i am removing any part, it works as expected. An output:
firing 100
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 11000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 16000
firing 1000
firing 1000
...
So, 3000ms timeout is never fired. There is a way to make that example to working a little different:
setTimeout(() => {
console.log('firing', 11000)
}, 11000)
setTimeout(() => {
console.log('firing', 90000)
}, 90000)
setInterval(() => {
console.log('firing', 1000)
}, 1000)
const timer4000 = setTimeout(() => {
console.log('firing', 4000)
}, 4000)
setTimeout(() => {
console.log('firing', 60000)
}, 60000)
setTimeout(async () => {
console.log('firing', 100)
const timer1500 = setTimeout(() => {
console.log('firing', 1500)
}, 1500)
await Promise.resolve()
clearTimeout(timer1500)
}, 100)
setTimeout(() => {
console.log('firing', 3000)
}, 3000)
clearTimeout(timer4000)
setTimeout(() => {
console.log('firing', 16000)
}, 16000)
Then, output is:
firing 100
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 11000
firing 1000
firing 1000
firing 1000
firing 1000
firing 1000
firing 16000
firing 3000
firing 1000
So, 3000ms timer is unlocked, but only after 16000ms timer is fired. O_O
I suppose, it is related to that one, but works a little different, so i am making another issue. I am a bit angry, because i spend a few days to extract specific issue form whole, async app. :/