The concept of Callback in NodeJS

View more Tutorials:

1- What is Callback?

To explain what the  Callback is, let's see a situation as follows:
You come to a shop to buy a  something you like. The shop staff tells you that the item is out of stock now. You leave the phone number and ask them to call back immediately after the goods is available. Then you can go out or do a job and do not need to care about the shop anymore, until you get a phone call notifying of the item asked by you from the shop.
NodeJS server can receive many requests from many users. Therefore to improve serviceability, all APIs of the  NodeJS  are designed to support Callback. The " callback" is a function that will be called when the NodeJs completes a specific task.

2-  Example of NodeJS Callback

In the  NodeJS,  APIs is designed to support the  Callback. Assume that you are writing a program to read 2 files. To do this you use the fs module, which gives you two functions such as readFile and  readFileSync to read the file. We will learn about the differences between these two functions.

Blocking

The readFileSync is a function reading files synchronously,. Therefore, while this function is executing, it will block the program from executing next code lines.
blocking-example.js
var fs = require("fs");

// -----> Read file 1:
console.log("\n");
console.log("Read File 1");

var data1 = fs.readFileSync('C:\\test\\file1.txt');

console.log("- Data of file 1: ");
console.log(data1.toString());


// -----> Read file 2:
console.log("\n");
console.log("Read File 2");

var data2 = fs.readFileSync('C:\\test\\file2.txt');
console.log("- Data of file 2: ");
console.log(data2.toString());


console.log("\n");
console.log("Program Ended");
 
Open CMD window and execute the  blocking-example.js file
node callback-examples/blocking-example.js
And this is the results received by you:

Non Blocking

You should use  readFile function to achieve better performance for the program. This function reads files asynchronously. It doesn't block the program executing the next code lines. In other words, the program does not wait for the function to complete. But when this function completes its task, it calls the Callback function.
// Read a file Asynchronous.
fs.readFile('C:\\test\\file1.txt', aCallbackFunction );
See the full example:
non-blocking-example.js
var fs = require("fs");

// A Callback function!
function readFinishedFile1(err, data)  {
   if (err) console.log(err);
   console.log("- Data of file 1: ");
   console.log(data.toString());
}

// A Callback function!
function readFinishedFile2(err, data)  {
   if (err) console.log(err);
   console.log("- Data of file 2: ");
   console.log(data.toString());
}

// -----> Read file 1:
console.log("\n");
console.log("Read File 1");

fs.readFile('C:\\test\\file1.txt', readFinishedFile1);

// -----> Read file 2:
console.log("\n");
console.log("Read File 2");

fs.readFile('C:\\test\\file2.txt', readFinishedFile2);

console.log("\n");
console.log("Program Ended \n");
Open  CMD window and run the  non-blocking-example.js file:
node callback-examples/non-blocking-example.js
And this is the result that you receives:

View more Tutorials: