JavaScript Promise Chaining (original) (raw)

Last Updated : 18 Dec, 2024

Promise chaining allows you to execute a series of asynchronous operations in sequence. It is a powerful feature of JavaScript promises that helps you manage multiple operations, making your code more readable and easier to maintain.

function task(message, delay) { return new Promise((resolve) => { setTimeout(() => { console.log(message); resolve(); }, delay); }); }

// Chaining promises task('Task 1 completed', 1000) .then(() => task('Task 2 completed', 2000)) .then(() => task('Task 3 completed', 1000));

`

**Output:

Task 1 completed
Task 2 completed
Task 3 completed

**In this example:

Promise States

A promise in JavaScript can be in one of three states, which determine how it behaves:

Error Handling in Chaining

JavaScript ``

Promise.resolve(5) .then((num) => { console.log(Value: ${num}); throw new Error("Something went wrong!"); }) .then((num) => { console.log(This won't run); }) .catch((error) => { console.error(Error: ${error.message}); });

``

**Output:

Value: 5
Error: Something went wrong!

Chaining with Dependent Tasks

JavaScript ``

function fetchUser(userId) { return Promise.resolve({ id: userId, name: "GFG" }); }

function fetchOrders(user) { return Promise.resolve([{ orderId: 1, userId: user.id }]); }

fetchUser(101) .then((user) => { console.log(User: ${user.name}); return fetchOrders(user); }) .then((orders) => { console.log(Orders: ${orders.length}); }) .catch((error) => console.error(error));

``

**Output:

User: GFG
Orders: 1

Advanced Usage: Parallel and Sequential Tasks in a Chain

You can combine Promise.all() with chaining for efficient execution.

JavaScript `

Promise.all([ Promise.resolve("Task 1 done"), Promise.resolve("Task 2 done") ]) .then(([result1, result2]) => { console.log(result1, result2); return Promise.resolve("Final Task done"); }) .then((finalResult) => console.log(finalResult)) .catch((error) => console.error(error));

`

**Output:

Task 1 done Task 2 done
Final Task done

Why Use Promise Chaining?

When to Use Promise Chaining?