🤝
Asynchronous JS

Promises

Ek Cleaner Async Solution
💡 Promise ek "restaurant token" jaisa hai — order dete waqt milta hai, aur ye guarantee deta hai ki EVENTUALLY ek result aayega — ya khana (resolved/fulfilled), ya "sorry, ingredient khatam" (rejected). Callback hell ki jagah, ek clean, chainable structure.

Promise ek object hai jo kisi async operation ke EVENTUAL result ko represent karta hai — 3 states: pending (abhi chal raha hai), fulfilled (successfully complete, value mili), rejected (fail hua, error mila). .then() success handle karta hai, .catch() errors handle karta hai — aur ye CHAIN ho sakte hain, nesting ki jagah.

function fetchUserData(id) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (id > 0) {
        resolve({ id: id, name: "Aarav" });   // success
      } else {
        reject("Invalid ID");                    // failure
      }
    }, 1000);
  });
}

fetchUserData(1)
  .then(user => {
    console.log("User mila: " + user.name);
    return user.id;
  })
  .then(id => {
    console.log("ID: " + id);   // chaining — nesting nahi!
  })
  .catch(error => {
    console.log("Error: " + error);   // koi bhi error yaha catch ho jaata hai
  });
🤝
Promise ek "restaurant token" jaisa hai — order dete waqt milta hai, aur ye guarantee deta hai ki EVENTUALLY ek result aayega — ya khana (resolved/fulfilled), ya "sorry, ingredient khatam" (rejected). Callback hell ki jagah, ek clean, chainable structure.
1 / 2
⚡ झट से Recap
  • Promise = eventual result (pending/fulfilled/rejected)
  • .then() = success handle, .catch() = error handle
  • Chaining (nesting nahi!) — callback hell solve karta hai
इस page में (2 subtopics)

Promise.all() SAARE promises resolve hone ka wait karta hai (ek bhi reject ho, poora fail ho jaata hai). Promise.race() sirf PEHLE resolve/reject hone wale ka result deta hai, baaki ignore.

const p1 = new Promise(resolve => setTimeout(() => resolve("Fast"), 100));
const p2 = new Promise(resolve => setTimeout(() => resolve("Slow"), 500));

Promise.all([p1, p2]).then(results => {
  console.log(results);   // ["Fast", "Slow"] — dono ka wait, order preserved
});

Promise.race([p1, p2]).then(result => {
  console.log(result);   // "Fast" — jo pehle resolve hua
});
💡Tip: Promise.race() timeout implement karne ke liye common pattern hai — ek "actual" promise aur ek "timeout" promise race karwa ke, jo bhi pehle aaye.

Promise.all() ek bhi reject hone par poora fail ho jaata hai. Promise.allSettled() SAARE promises ka result deta hai (fulfilled ya rejected, dono), koi bhi individual failure poore operation ko fail nahi karti.

const promises = [
  Promise.resolve("Success 1"),
  Promise.reject("Failed"),
  Promise.resolve("Success 2")
];

Promise.allSettled(promises).then(results => {
  results.forEach(r => console.log(r.status, r.value || r.reason));
});
// fulfilled Success 1
// rejected Failed
// fulfilled Success 2
💡Tip: allSettled() useful hai jab tumhe HAR result chahiye ho, chahe kuch fail ho jaayein — jaise multiple independent API calls jaha ek fail hone se baaki data useless nahi ho jaana chahiye.