Explain Async Await with Promises in Node.js
Last Updated :
09 Jul, 2024
Async/Await in Node.js is a powerful way to handle asynchronous operations. It allows you to write asynchronous code in a synchronous manner, making it easier to read, write, and debug. This feature is built on top of Promises, which represent a value that may be available now, or in the future, or never.
To use async-await, we just need to create an async function in which we will implement our try-catch block. In the try block, we will await our promise to be completed. If it gets resolved we will get the result otherwise an error will be thrown through the catch block. Await can only be used inside an async function or async callback or async arrow function.
Introducing Async/Await
Async/Await is syntactic sugar built on Promises, allowing you to write asynchronous code as if it were synchronous, using async
functions and the await
keyword.
Async Function
An async
function is a function declared with the async
keyword. It always returns a Promise. If the function returns a value, the Promise resolves with that value; if the function throws an exception, the Promise rejects with the thrown value.
Await Keyword
The await
keyword can only be used inside an async
function. It pauses the execution of the function until the Promise is resolved or rejected.
const fetchData = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = { id: 1, name: 'Jane Doe' };
resolve(data);
}, 2000);
});
};
const getData = async () => {
try {
const data = await fetchData();
console.log('Data received:', data);
} catch (error) {
console.error('Error:', error);
}
};
getData();
Advantages of Async/Await
- Simpler Syntax: Async/Await allows you to write asynchronous code in a synchronous-like manner, making it easier to understand and maintain.
- Error Handling: Use
try/catch
blocks to handle errors, just like synchronous code. - Improved Readability: Code that uses Async/Await is often more readable than code that chains multiple
.then()
calls.
Fetching Data from an API
const fetch = require('node-fetch');
const fetchUser = async (userId) => {
try {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
const user = await response.json();
console.log('User:', user);
} catch (error) {
console.error('Error fetching user:', error);
}
};
fetchUser(1);
Here, fetchUser
is an async
function that waits for the fetch operation to complete and then processes the response.
Chaining Async Operations
const fetch = require('node-fetch');
const fetchPost = async (postId) => {
const response = await fetch(`https://jsonplaceholder.typicode.com/posts/${postId}`);
return response.json();
};
const fetchUser = async (userId) => {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
return response.json();
};
const getPostAndUser = async (postId, userId) => {
try {
const post = await fetchPost(postId);
const user = await fetchUser(userId);
console.log('Post:', post);
console.log('User:', user);
} catch (error) {
console.error('Error:', error);
}
};
getPostAndUser(1, 1);
This above syntax demonstrates chaining multiple asynchronous operations using Async/Await.
Steps to Setup Project
Step 1: Make a folder structure for the project.
mkdir myapp
Step 2:Â Navigate to the project directory
cd myapp
Step 3: Initialize the NodeJs project inside the myapp folder.
npm init -y
Project Structure:

Example: Implementation to explain async await with promises.
Node
// app.js
const mod = (a, b) => {
return new Promise((resolve, reject) => {
if (b == 0) {
// Rejected (error)
reject("Modulo zero is not allowed");
} else {
// Resolved (Success)
resolve(a % b);
}
});
};
// 5 mod 2 will give result 1
async function _5mod2() {
try {
const res = await mod(5, 2);
console.log(`The result of division is ${res}`);
} catch (err) {
console.log(err);
}
};
_5mod2();
// 5 mod 0 will give error
async function _5mod0() {
try {
const res = await mod(5, 0);
console.log(`The result of division is ${res}`);
} catch (err) {
console.log(err);
}
};
_5mod0();
OutputThe result of division is 1
Modulo zero is not allowed
Similar Reads
Explain Promise.all with async-await in JavaScript
In JavaScript, Promise.all with async-await is used to handle multiple asynchronous operations concurrently. By combining Promise.all with await, you can wait for all promises to resolve or any to reject, ensuring that all asynchronous tasks are complete before proceeding with the next code executio
4 min read
Explain Promise.any() with async-await in JavaScript
In this article, we will try to understand how to implement the Promise.any() method with async-await in JavaScript using some theoretical explanations followed by some coding examples as well. Let us firstly quickly understand the working of Promise.any() method with some theoretical examples (incl
4 min read
Explain Promise.race() with async-await in JavaScript
In this article, we will try to understand how we may implement Promise.race() method with async-await in JavaScript with the help of certain coding examples as well as theoretical explanations. Let us first quickly understand how we may implement Promise.race() method. This method is one of the mos
3 min read
Explain Promise.allSettled() with async-await in JavaScript
In this article, we will try to understand how we may implement the Promise.allSettled() method with async-await in JavaScript with the help of certain coding examples as well as theoretical explanations. Let us first quickly understand about Promise.allSettled() method. This method is one of the mo
3 min read
How to use Async-Await pattern in example in Node.js ?
Modern javascript brings with it the async-await feature which enables developers to write asynchronous code in a way that looks and feels synchronous. This helps to remove many of the problems with nesting that promises have, and as a bonus can make asynchronous code much easier to read and write.
1 min read
How to delay a loop in JavaScript using async/await with Promise ?
In JavaScript, you can delay a loop by using async/await with Promise. By wrapping a setTimeout() inside a Promise and using await, you can pause execution at each iteration, creating delays between loop iterations for asynchronous tasks without blocking the main thread. What is async and await?asyn
2 min read
Async Await in Node.js
Async and await in Node are the modern way of handling asynchronous operations more efficiently. These are powerful keywords that replaces the traditional callback and Promise chaining approaches. Handling Asynchronous Operations Before Async AwaitCallbacksBefore Node version 7.6, the callbacks were
3 min read
Explain the Process Object in Node.js
In this article, we are going to explore about process object of Node.js in detail. The Process object in node.js is a global object that can be used in any module without requiring it in the environment. This object is useful in the perspective of getting the information related to the node.js envi
3 min read
Difference between Promise and Async/Await in Node
In Node.js, both Promises and Async/Await are used for handling asynchronous operations, but they differ in how they simplify the code. Promises provide a simple way to work with callbacks, while Async/Await offers a more readable and synchronous way to handle asynchronous tasks. PromiseA Promise is
4 min read
Node.js Promise Chaining
Node.js is great at handling tasks that don't need to happen instantly, like fetching data from a website. Promise chaining helps you manage these tasks in a specific order, one after the other. What is Promise Chaining? Promise chaining in Node.js allows you to execute multiple asynchronous operati
4 min read