J

Introduction to Asynchronous Programming in JavaScript: Promises, Async, and Await

PinoyFreeCoder
Fri Nov 08 2024

Introduction to Asynchronous Programming in JavaScript: Promises, Async, and Await

Asynchronous programming in JavaScript allows you to execute tasks without blocking the main thread, enabling a smoother, non-blocking experience for the user. In this guide, we’ll cover the essentials of asynchronous programming using Promises, Async, and Await in JavaScript.

1. Why Use Asynchronous Programming?

JavaScript is single-threaded, meaning it can only execute one task at a time. Asynchronous programming helps you handle tasks like fetching data, handling file uploads, or waiting for user input without blocking other processes, enhancing the user experience.

2. Callbacks: The Foundation of Asynchronous JavaScript

Callbacks were the first method for handling asynchronous tasks in JavaScript. A callback function is a function passed as an argument to another function, which then executes it once a task is completed.


      function fetchData(callback) {
        setTimeout(() => {
          console.log("Data fetched!");
          callback();
        }, 1000);
      }
  
      fetchData(() => {
        console.log("Callback executed after data fetch.");
      });
      

3. Promises: A Better Way to Handle Async Tasks

Promises provide a cleaner way to manage asynchronous code. A Promise represents a value that may not yet be available but will eventually be resolved or rejected. This helps avoid deeply nested callbacks (known as "callback hell").


      const fetchData = new Promise((resolve, reject) => {
        setTimeout(() => {
          const success = true;
          if (success) resolve("Data fetched!");
          else reject("Fetch failed.");
        }, 1000);
      });
  
      fetchData
        .then(data => console.log(data))
        .catch(error => console.error(error));
      

3.1 Promise States

  • Pending: The initial state, neither resolved nor rejected.
  • Fulfilled: The operation completed successfully.
  • Rejected: The operation failed.

4. Async and Await: Simplifying Promises

The async and await keywords make handling promises more straightforward. By marking a function as async, you can use the await keyword inside it to pause execution until a promise resolves, creating code that looks synchronous.


      async function fetchData() {
        try {
          const data = await new Promise((resolve) => {
            setTimeout(() => resolve("Data fetched!"), 1000);
          });
          console.log(data);
        } catch (error) {
          console.error(error);
        }
      }
  
      fetchData();
      

5. Combining Multiple Async Operations

You can combine multiple asynchronous tasks by using Promise.all, which runs multiple promises in parallel and returns when all of them resolve or any of them rejects.


      async function fetchMultipleData() {
        try {
          const [data1, data2] = await Promise.all([
            new Promise((resolve) => setTimeout(() => resolve("Data 1"), 1000)),
            new Promise((resolve) => setTimeout(() => resolve("Data 2"), 1500)),
          ]);
          console.log(data1, data2);
        } catch (error) {
          console.error(error);
        }
      }
  
      fetchMultipleData();
      

6. Handling Errors with Async/Await

To handle errors in async functions, use a try/catch block. If a promise is rejected, the error is caught and can be handled gracefully.


      async function fetchData() {
        try {
          const data = await Promise.reject("Fetch failed.");
          console.log(data);
        } catch (error) {
          console.error("Error:", error);
        }
      }
  
      fetchData();
      

7. Conclusion

Asynchronous programming in JavaScript allows you to handle long-running tasks without blocking the main thread. Using Promises and Async/Await makes writing and reading asynchronous code easier and more maintainable, which is critical for building responsive web applications.

Start Your Online Store with Shopify

Build your e-commerce business with the world's leading platform. Get started today and join millions of successful online stores.

🎉 3 MONTHS FREE for New Users! 🎉
Get Started
shopify