4. Examples

Example 1: Simple Async Order of Operations

console.log("1. Start");

setTimeout(() => {
  console.log("3. Inside setTimeout");
}, 2000);

console.log("2. End");
Output
1. Start
2. End
3. Inside setTimeout

Example 2: Async Order of Operations in a Function

function asyncTest() {
  console.log("1. Start");

  setTimeout(() => {
    console.log("3. Inside setTimeout");
  }, 2000);

  console.log("2. End");
}
asyncTest();
Output
1. Start
2. End
3. Inside setTimeout

Example 3: Async Non-determinism

console.log("1. Start");

setTimeout(() => {
  console.log("3. Inside setTimeout");
}, 0);

for (let i = 0; i < 10000000000; i++) {}
console.log("2. End");
Output
1. Start
2. End
3. Inside setTimeout

Example 4: Promise Order of Operations in a Function

function mockPromiseCall(waitTime, returnValue = "Hello World!", reject = false) {
  return new Promise((resolve, shouldReject) => {
      setTimeout(() => {
          if (shouldReject) {
              reject(returnValue);
          }
          else {
              resolve(returnValue);
          }
      }, waitTime);
  });
}

function asyncTest() {
  console.log("1. Start");
  mockPromiseCall(0, "Some return value").then((result) => console.log(result));
  console.log("2. End");
}
asyncTest();
Output
1. Start
2. End
3. Some return value

Example 5: Promise Chaining Order of Operations

function mockPromiseCall(waitTime, returnValue = "Hello World!", shouldReject = false) {
  return new Promise((resolve, reject) => {
      setTimeout(() => {
          if (shouldReject) {
              reject(returnValue);
          }
          else {
              resolve(returnValue);
          }
      }, waitTime);
  });
}

function asyncTest() {
  console.log("Start");
  mockPromiseCall(0, "First promise chain")
    .then((result) => console.log(result))
    .then(() => console.log("Second promise chain"))
    .then(() => console.log("Third promise chain"));
}
asyncTest();
Output
Start
First promise chain
Second promise chain
Third promise chain

Example 6: Async/Await Order of Operations

function mockPromiseCall(waitTime, returnValue = "Hello World!", shouldReject = false) {
  return new Promise((resolve, reject) => {
      setTimeout(() => {
          if (shouldReject) {
              reject(returnValue);
          }
          else {
              resolve(returnValue);
          }
      }, waitTime);
  });
}

async function asyncTest() {
  console.log("Start");
  const asyncResult = await mockPromiseCall(0, "Some return value");
  console.log(asyncResult);
  console.log("End");
}
asyncTest();
Output
Start
Some return value
End

Example 7: Async/Await Order of Operations with Chains

function mockPromiseCall(waitTime, returnValue = "Hello World!", shouldReject = false) {
  return new Promise((resolve, reject) => {
      setTimeout(() => {
          if (shouldReject) {
              reject(returnValue);
          }
          else {
              resolve(returnValue);
          }
      }, waitTime);
  });
}

async function asyncTest() {
  console.log("Start");
  const asyncResult = await mockPromiseCall(0, "Some return value")
    .then((result) => {
      console.log(result);
      return "Post Chain";
    });
  console.log(asyncResult);
  console.log("End");
}
asyncTest();
Output
Start
Some return value
Post Chain
End

Example 8: Synchronous File Reading with `fs.readFileSync`

const fs = require("fs");

function readFileSyncExample() {
  console.log("Start reading file...");
  const data = fs.readFileSync("example.txt", "utf-8");
  console.log("File content:", data);
  console.log("Done reading file.");
}

readFileSyncExample();
Output
Start reading file...
File content: [file contents of example.txt]
Done reading file.

Example 9: Synchronous File Writing

const fs = require("fs");

function writeFileSyncExample() {
  console.log("Start writing file...");
  fs.writeFileSync("output.txt", "This is a synchronous write.");
  console.log("File written successfully.");
}

writeFileSyncExample();
Output
Start writing file...
File written successfully.

Example 10: Asynchronous File Reading with Promises

const fs = require("fs");

async function readFileAsync() {
  try {
      console.log("Start reading file...");
      const data = await fs.promises.readFile("example.txt", "utf-8");
      console.log("File content:", data);
      console.log("Done reading file.");
  }
  catch (error) {
      console.error("Error reading file:", error);
  }
}

readFileAsync();
Output
Start reading file...
File content: [file contents of example.txt]
Done reading file.

Example 11: Asynchronous File Writing with Promises

const fs = require("fs");

async function writeFileAsync() {
  try {
      console.log("Start writing file...");
      await fs.promises.writeFile("output.txt", "This is an async write with promises.");
      console.log("File written successfully.");
  }
  catch (error) {
      console.error("Error writing file:", error);
}
}

writeFileAsync();
Output
Start writing file...
File written successfully.

Example 12: Asynchronous File Reading with Callbacks

const fs = require("fs");

function readFileCallback() {
  console.log("Start reading file...");
  fs.readFile("example.txt", "utf-8", (err, data) => {
      if (err) {
          console.error("Error reading file:", err);
      }
      else {
          console.log("File content:", data);
      }
      console.log("Done reading file.");
  });
}

readFileCallback();
Output
Start reading file...
File content: [file contents of example.txt]
Done reading file.

Example 13: Asynchronous File Writing with Callbacks

const fs = require("fs");

function writeFileCallback() {
  console.log("Start writing file...");
  fs.writeFile("output.txt", "This is an async write with callbacks.", (err) => {
      if (err) {
          console.error("Error writing file:", err);
      }
      else {
          console.log("File written successfully.");
      }
  });
}

writeFileCallback();
Output
Start writing file...
File written successfully.

Example 14: Reading Multiple Files in Parallel

const fs = require("fs");

async function readMultipleFiles() {
  try {
      console.log("Start reading files...");
      const [file1, file2] = await Promise.all([
          fs.promises.readFile("example1.txt", "utf-8"),
          fs.promises.readFile("example2.txt", "utf-8")
      ]);
      console.log("File 1 content:", file1);
      console.log("File 2 content:", file2);
      console.log("Done reading files.");
  }
  catch (error) {
      console.error("Error reading files:", error);
  }
}

readMultipleFiles();
Output
Start reading files...
File 1 content: [file contents of example1.txt]
File 2 content: [file contents of example2.txt]
Done reading files.