Types of Promises in JavaScript
Forgive me for the Typos and Grammatical Mistakes, I'm still learning. ?
What are Promises?
Promises are a way to handle asynchronous operations in JavaScript. They represent a value that may be available now, or in the future, or never. Promises have three states: pending, fulfilled, and rejected.
Types of Promises
Pending: The initial state of a promise. It represents that the operation is still in progress and has not been completed yet.
Fulfilled: The state of a promise when the operation has been completed successfully. The promise has a value, and it is available to be used.
Rejected: The state of a promise when the operation has failed. The promise has a reason for the failure, and it can be handled using the catch method.
Why Promises are Important?
- Promises help in writing cleaner and more readable asynchronous code.
- They provide a way to handle asynchronous operations in a more structured manner.
- Promises can be chained together to perform multiple asynchronous operations sequentially.
- Whether fetching data, handling multiple tasks or racing for the fast result, Promises are essential in Modern JavaScript.
1. Simple Promise
const promise = new Promise((resolve, reject) => { // Imagine fetching user data from an API const user = { name: "Aasim Ashraf", age: 21, }; user ? resolve(user) : reject("User not found"); }); promise .then((user) => console.log(user)) .catch((error) => console.log(error));
A Promise that either resolves or rejects often used for API calls or async tasks.
- When to Use : For single async operation like fetching data from an API.
- Advantages : Clean handling of success and failure in one block.
2. Promise.all Multiple Operations
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
Waits for all promises to resolve, if one fails, the whole chain fails. Best for multiple async tasks that needs to be resolved together.
- When to Use : For multiple async operations that are not dependent on each other.
- Advantages : Fetch multiple data at once and handle them together.
- Disadvantages : If one fails, all fail.
What Happens if One Promise Fails in Promise.all?
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
Problem with Promise.all is that if one promise fails, the whole chain fails. To avoid this, you can use Promise.allSettled.
3. Promise.allSettled
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.allSettled([fetchUser, fetchPosts]) .then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { console.log("User Data:", result.value); } else { console.log("Error:", result.reason); } }); });
Promise.allSettled waits for all promises to settle, whether they are resolved or rejected. It returns an array of objects with a status and value or reason.
- When to Use : When you want to know all results, even failures.
- Advantages : Fetch multiple data at once and handle them together.
- Disadvantages : If one fails, it won't stop the chain
4. Promise.race Fastest Result
const fast = new Promise(resolve => setTimeout(resolve, 1000, "Fast")); const slow = new Promise(resolve => setTimeout(resolve, 2000, "Slow")); Promise.race([fast, slow]) .then((result) => { console.log(result); }) .catch((error) => console.log(error));
Returns the result of the first promise to settle, whether it's resolved or rejected. Useful when you need speed, such as loading the first available response.
- When to Use : When speed matters more than waiting for all results.
- Limit : You may get an error if the fastest promise fails.
What if a Promise in Promise.race Fails?
const error = new Promise((resolve) => { setTimeout(() => resolve("Error"), 1000); }); const success = new Promise((resolve) => { setTimeout(() => resolve("Success"), 2000); }); Promise.race([error, success]) .then((result) => { console.log(result); }) .catch((error) => console.log("First Rejected",error));
If the first promise fails, the whole chain fails. To avoid this, you can use Promise.any.
5. Promise.any First Successful Result
const promise1 = Promise.reject("Error 1"); const promise2 = new Promise(resolve => setTimeout(resolve, 3000, "Promise 2")); Promise.any([promise1, promise2]) .then((result) => { console.log("First Success",result); }) .catch((error) => console.log("All Rejected",error));
Resolves when any one Promise is resolved. Ignores all rejections until all promises are rejected. Useful when you need the first successful result, regardless of the rest.
- When to Use : When you need the first successful result, regardless of the rest of the promises.
- Limit : If all promises are rejected, it will throw an error.
Recap
- Simple Promise: For single async operation like fetching data from an API.
- Promise.all: For multiple async operations that are not dependent on each other.
- Promise.allSettled: When you want to know all results, even failures.
- Promise.race: When speed matters more than waiting for all results.
- Promise.any: When you need the first successful result, regardless of the rest of the promises.
Final Thoughts
- Choosing the right type of promise is the key to efficient asynchronous programming.
- Use the Promise that best fits your use case: Speed, multiple operations, or handling all results.
The above is the detailed content of Types of Promises in JavaScript. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Detailed explanation of JavaScript string replacement method and FAQ This article will explore two ways to replace string characters in JavaScript: internal JavaScript code and internal HTML for web pages. Replace string inside JavaScript code The most direct way is to use the replace() method: str = str.replace("find","replace"); This method replaces only the first match. To replace all matches, use a regular expression and add the global flag g: str = str.replace(/fi

Article discusses creating, publishing, and maintaining JavaScript libraries, focusing on planning, development, testing, documentation, and promotion strategies.

The article discusses strategies for optimizing JavaScript performance in browsers, focusing on reducing execution time and minimizing impact on page load speed.

The article discusses effective JavaScript debugging using browser developer tools, focusing on setting breakpoints, using the console, and analyzing performance.

This article outlines ten simple steps to significantly boost your script's performance. These techniques are straightforward and applicable to all skill levels. Stay Updated: Utilize a package manager like NPM with a bundler such as Vite to ensure

Sequelize is a promise-based Node.js ORM. It can be used with PostgreSQL, MySQL, MariaDB, SQLite, and MSSQL. In this tutorial, we will be implementing authentication for users of a web app. And we will use Passport, the popular authentication middlew

This article will guide you to create a simple picture carousel using the jQuery library. We will use the bxSlider library, which is built on jQuery and provides many configuration options to set up the carousel. Nowadays, picture carousel has become a must-have feature on the website - one picture is better than a thousand words! After deciding to use the picture carousel, the next question is how to create it. First, you need to collect high-quality, high-resolution pictures. Next, you need to create a picture carousel using HTML and some JavaScript code. There are many libraries on the web that can help you create carousels in different ways. We will use the open source bxSlider library. The bxSlider library supports responsive design, so the carousel built with this library can be adapted to any

The article explains how to use source maps to debug minified JavaScript by mapping it back to the original code. It discusses enabling source maps, setting breakpoints, and using tools like Chrome DevTools and Webpack.
