Event Loop

Asynchronous, Synchronous, Blocking, Non-blocking

Synchronous

  • Synchronous -> blocking.
    • Events will be executed one after the other, sequentially, in order.

Example with synchronous version of the readFile function:

// Here, the program waits until the file is read.
// Then the contents of the file are assigned to the `contents` variable.
var contents = fs.readFileSync("file.txt")

// This will now print the contents of the file:
console.log(contents)

Asynchronous

  • Asynchronous -> non-blocking.
    • Events will happen in parallel, and the order is not guaranteed.
    • Accepts callback functions that get called when the event is finished.

Example with asynchronous version of the readFile function:

var contents

// Here, the program does NOT wait until the file is read.
// The `fs.readFile` function returns *immediately*!
// Note how `readFile` accepts a callback - this is what gets called
// when it is finished reading.
fs.readFile("file.txt", function (err, fileContents) {
    // This function is run AFTER the file reading is done, some time in the future.
    // We don't know when.
    contents = fileContents
})

// At this point, the file reading is not done yet, so contents will still be empty!
console.log(contents)

The order in which the operations happen in this script are as follows:

  1. Line 30: fs.readFile
  2. Line 37: console.log
  3. Line 33: contents = fileContents