🧩 JavaScript Promises

Last Updated: 27th October 2025


A Promise in JavaScript represents the eventual completion or failure of an asynchronous operation.

It acts as a placeholder for a value that will be available sometime in the future (like API data, file reading, etc.).

Hinglish Tip 🗣: Promise ko samjho ek “future ka vaada” — abhi nahi, par result baad me mil jayega!


⚙️ Promise States

A Promise can be in one of three states:

  • Pending: The promise is not yet fulfilled or rejected.
  • Fulfilled: The promise has been fulfilled with a value.
  • Rejected: The promise has been rejected with an error.
  • Syntax:
let promise = new Promise((resolve, reject) => {
  // asynchronous code
});

promise
  .then((result) => {
    // handle success
  })
  .catch((error) => {
    // handle error
  })
  .finally(() => {
    // always runs
  });

Example: Basic Promise

let promise = new Promise((resolve, reject) => {
  let success = true;

  if (success) {
    resolve("Task completed!");
  } else {
    reject("Task failed!");
  }
});

promise
  .then((message) => console.log(message))
  .catch((error) => console.error(error))
  .finally(() => console.log("🎯 Operation finished"));

🗣 Hinglish: resolve() → jab sab sahi ho,reject() → jab kuch gadbad ho,finally() → dono case me chalega (cleanup).


Promise Chaining

You can run multiple asynchronous operations in sequence using .then() chaining — no callback hell!

new Promise((resolve) => {
  setTimeout(() => resolve(10), 1000);
})
  .then((num) => {
    console.log("First:", num);
    return num * 2;
  })
  .then((num) => {
    console.log("Second:", num);
    return num * 3;
  })
  .then((num) => {
    console.log("Third:", num);
  })
  .catch((err) => console.error(err))
  .finally(() => console.log("Done!"));

🗣 Hinglish: Yahaan har .then() pichle ka result le raha hai — ek ke baad ek chain me.


Promise.all()

Promise.all([
  new Promise((resolve) => setTimeout(() => resolve(10), 1000)),
  new Promise((resolve) => setTimeout(() => resolve(20), 2000)),
  new Promise((resolve) => setTimeout(() => resolve(30), 3000)),
])
  .then((values) => console.log(values))
  .catch((err) => console.error(err))
  .finally(() => console.log("Done!"));

⚠️ Error Handling in Promises

Use .catch() to handle any error in the chain.

new Promise((resolve, reject) => {
  reject("Something went wrong!");
})
  .then(() => console.log("Will not run"))
  .catch((error) => console.error("Caught:", error))
  .finally(() => console.log("Cleaning up..."));

Fake API Call

function fetchData() {
  return new Promise((resolve, reject) => {
    console.log("Fetching data... ⏳");

    setTimeout(() => {
      let success = Math.random() > 0.3;
      if (success) {
        resolve({ name: "Riya", age: 22 });
      } else {
        reject("Network Error!");
      }
    }, 1500);
  });
}

fetchData()
  .then((data) => {
    console.log("Data Received:", data);
    return data.name;
  })
  .then((name) => console.log("User:", name))
  .catch((err) => console.error("❌ Error:", err))
  .finally(() => console.log("📦 API Process Completed"));

Promise Hell → Cleaner Async Code

Before Promises, callbacks created Callback Hell:

setTimeout(() => {
  console.log("Task 1");
  setTimeout(() => {
    console.log("Task 2");
    setTimeout(() => {
      console.log("Task 3");
    }, 1000);
  }, 1000);
}, 1000);

✅ Using Promises:

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

task(1000, "Task 1")
  .then(() => task(1000, "Task 2"))
  .then(() => task(1000, "Task 3"))
  .finally(() => console.log("All done!"));