Master Async Await & Event Loop πŸ”₯ | JavaScript Journey | In Hindi | Death Code - DeathCode

Understanding Async and Await in JavaScript

A comprehensive guide to understanding how async and await work in JavaScript.

1. What are Async and Await?

Async and await are syntactic features in JavaScript that simplify working with promises. They allow you to write asynchronous code in a more synchronous manner, making it easier to read and maintain.

When you declare a function as async, it automatically returns a promise. The await keyword can be used inside an async function to pause the execution until the promise is resolved.

2. Understanding the Call Stack with Async/Await

The call stack is a data structure that keeps track of function calls in JavaScript. When using async/await, the call stack behaves similarly to how it does with regular function calls, but with some differences due to the asynchronous nature of promises.

Here’s an example to illustrate how async/await works with the call stack:

console.log(1);
 
setTimeout(() => {
    console.log("2");
}, 2000);
 
console.log(3);
console.log(4);
 
async function fun1() {
    // Simulating an asynchronous operation
    const result = await new Promise((resolve) => {
        setTimeout(() => {
            resolve("5");
        }, 1000);
    });
    console.log(result);
}
 
fun1(); // Output: 1, 3, 4, 5, 2

In this example:

  • When console.log(1) is executed, it logs 1 to the console.
  • The setTimeout function is called, which schedules the logging of 2 after 2 seconds but does not block the execution.
  • console.log(3) and console.log(4) are executed next, logging 3 and 4 to the console.
  • When fun1() is called, it starts executing, and the await pauses the function until the promise resolves, logging 5 after 1 second.
  • Finally, after 2 seconds, 2 is logged to the console.

3. How Async/Await Works

When an async function is called, the following steps occur:

  1. The function starts executing and returns a promise.
  2. When the await keyword is encountered, the execution is paused until the promise is resolved.
  3. Once the promise resolves, the execution continues from where it was paused.
  4. If an error occurs during the execution, it can be caught using a try/catch block.

Here’s an example demonstrating error handling with async/await:

async function fetchData() {
    try {
        const response = await fetch('https://api.example.com/data');
        const data = await response.json();
        console.log(data);
    } catch (error) {
        console.error('Error fetching data:', error);
    }
}
 
fetchData();

4. Conclusion

Async and await provide a powerful way to handle asynchronous operations in JavaScript, making the code cleaner and easier to understand. By utilizing these features, developers can write more maintainable and readable code while effectively managing asynchronous tasks.

Β© 2024 DeathCode. All Rights Reserved.