Getting Started with Asynchronous JavaScript: Promises and Async/Await


Asynchronous programming is an important aspect of modern web development, allowing us to perform long-running tasks without blocking the main thread and causing the user interface to freeze. In JavaScript, there are several ways to write asynchronous code, including using callbacks, promises, and the async/await syntax. In this post, we’ll take a look at the latter two approaches and how they can make our asynchronous code easier to write and understand.

What are Promises?

A Promise is an object that represents the eventual result of an asynchronous operation. It can be in one of three states: pending, fulfilled, or rejected. When a Promise is created, it is in the pending state. Once the asynchronous operation has completed, the Promise is either fulfilled with a value or rejected with an error.

Here’s an example of a Promise that fetches data from a server:


To use this Promise, we can call the fetchData function and use the then and catch methods to handle the resolved value or rejected error:


Promises provide a clean and concise way to handle asynchronous operations, but they can still be somewhat cumbersome when we need to chain multiple asynchronous operations together. This is where the async/await syntax comes in.

Async/Await Syntax

The async/await syntax is a modern way to write asynchronous code that uses Promises under the hood. It allows us to write asynchronous code that looks and behaves like synchronous code, making it easier to understand and debug.

To use async/await, we simply declare a function with the async keyword and use the await keyword inside the function to wait for a Promise to be resolved. Here’s our fetchData example rewritten with async/await:


To use this async function, we can call it in the same way as a regular synchronous function:


Note that the fetchData the function now returns the resolved value directly, rather than wrapping it in a Promise.

Error Handling with Async/Await

One of the benefits of using async/await is that it makes error handling easier. With Promises, we need to use the catch method to handle errors. With async/await, we can use a try/catch block just like we would in a synchronous function.

Leave a Comment