Asynchronous programming is a core concept in Node.js, enabling it to handle I/O-bound tasks efficiently. Understanding the timing functions setTimeout, setImmediate, process.nextTick, and setInterval is crucial for writing performant and bug-free Node.js applications. In this post, we'll explore how these functions work and when to use them.
setTimeout
setTimeout()
function in node.js or javascript is used
i. if you want to call it after a certain delay of time or simulate the function for a certain time.
Points to remember:
i. Minimum Delay is One milliseconds
ii. Delay are not guaranteed coz of the events loop
(()=>{
let stockPrice=1000;
console.log(`Stock Price: ${stockPrice}`);
setTimeout(()=>{
console.log(`Stock Price: ${stockPrice+10} after 5 seconds`)
},5000)
})();
/*Output
Stock Price: 1000
Stock Price: 1010 after 5 seconds
*/
setImmediate
setImmediate
executes a callback on the next iteration of the event loop after the current poll phase completes.
Uses Cases:
i. to execute a function after the current I/O event callback.
ii. to ensure a function runs after an async function
Points to remember :
i. executes always after the current poll phase
ii. Not guaranteed to run before 0ms of setTimeout
(()=>{
let stockPrice=1000;
console.log(`Stock Price: ${stockPrice}`);
setTimeout(()=>{
console.log(`Stock Price: ${stockPrice+10}`)
},0)
setImmediate(()=>{
console.log('Stock sales increase after increase in Price')
})
})();
/* Output
Stock Price: 1000
Stock Price: 1010
Stock sales increase after increase in Price
*/
process.nextTick
process.nextTick
schedules a callback to be invoked in the same phase of the event loop, before the next I/O event.
Use Cases:
i. Avoiding long-running operations within a single event loop tick.
Points to remember:
i. Executes before any I/O events or timers.
ii. Can starve the event loop if used excessively.
iii. It will always execute before setTimeout and setImmediate.
(()=>{
let stockPrice=1000;
console.log(`Stock Price: ${stockPrice}`);
setTimeout(()=>{
console.log(`Stock Price: ${stockPrice+10}`)
},0)
setImmediate(()=>{
console.log('Stock sales increase after increase in Price')
})
process.nextTick(()=>{
console.log(`Stock Price Opening for Day: ${stockPrice+2}`)
})
})();
/* Output
Stock Price: 1000
Stock Price Opening for Day: 1002
Stock Price: 1010
Stock sales increase after increase in Price
*/
setInterval
setInterval
is used to run a function after a particular interval of time
Uses Cases :
i. Repeatedly executing a task at regular intervals.
ii. Creating polling mechanisms.
Points to remember:
i. Interval duration is not guaranteed.
ii. Can cause memory leaks if not cleared properly.
iii. Always use its twin function clearInterval
or it can run for infinite time
(()=>{
let time=1;
let stockPrice=1000;
console.log(`Stock Price: ${stockPrice}`);
setTimeout(()=>{
console.log(`Stock Price Increased: ${stockPrice+10} `)
},5000)
let timeOut=setInterval(()=>{
console.log(`${time++} second`)
if(time===5){
clearInterval(timeOut)
}
},1000)
})();
/* Run the above code to check the actual output
Stock Price: 1000
1 second
2 second
3 second
4 second
Stock Price Increased: 1010
*/
Conclusion
Understanding the nuances of setTimeout, setImmediate, process.nextTick, and setInterval is key to mastering asynchronous programming in Node.js. Each function serves a specific purpose and choosing the right one can significantly impact the performance and behavior of your application. Experiment with these functions to see their effects in different scenarios and improve your asynchronous code handling.
For more information go through the below link
Understanding process.nextTick()
Understanding setImmediate()
Discover Javascript timers
Top comments (2)
Not sure you are right on
setTimeout
according to the docs you can specify 0 and expect ASAP unless you are nested too much, in which case the timeout is clamped at minimum 4ms. Is this a specific nodejs thing?