setTimeout strange result

Viewed 36

I was going through some articles on event loop and tried output of the following:

console.log('print [1]');
setTimeout(() => console.log("print [2]"), 0);
setTimeout(() => console.log("print [3]"), 0);
setTimeout(() => console.log("print [4]"), 0);

console.log("print [5]");

It will output synchronous consoles or macrotask calls before picking timeout logs. It printed as usual:

print [1]
print [5]
print [2]
print [3]
print [4]

Also could understand the following as well:

console.log('print [1]');
setTimeout(() => console.log("print [2]"), 0);
setTimeout(() => console.log("print [3]"), 2); // passed 2ms as the delay
setTimeout(() => console.log("print [4]"), 0);

console.log("print [5]");

print [1]
print [5]
print [2]
print [4]
print [3]

But it got interesting when I passed 1ms as the delay to the second timeout. I was expecting it to behave the same way as passing 2ms delay but instead it behaved as if 0ms was passed.

console.log('print [1]');
setTimeout(() => console.log("print [2]"), 0);
setTimeout(() => console.log("print [3]"), 1);
setTimeout(() => console.log("print [4]"), 0);
    
console.log("print [5]");

print [1]
print [5]
print [2]
print [3]
print [4]

Does something specific happens because of that 1ms or is it some sort of threshold?

0 Answers
Related