Bitlyst

JavaScript Promises Explained

๐Ÿš€ What is a Promise?

  • A Promise is a special JavaScript object that represents the result of an asynchronous operation.
  • Itโ€™s like a placeholder for a value that will be available later (success or failure).

Think: โ€œI promise Iโ€™ll give you the result later.โ€


๐Ÿ“ฆ The 3 States of a Promise

  1. Pending โ€“ still waiting for the result.
  2. Fulfilled โ€“ completed successfully, has a value.
  3. Rejected โ€“ failed, has a reason (usually an error).

Once a promise is fulfilled or rejected, itโ€™s settled and cannot change again.


๐Ÿ›  How to Create a Promise

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("Done! โœ…");
    // or reject("Something went wrong โŒ");
  }, 1000);
});
  • The function inside new Promise runs immediately.
  • Call resolve(value) to fulfill.
  • Call reject(error) to fail.

โณ Using a Promise

With .then and .catch

myPromise
  .then(result => console.log(result))  // "Done! โœ…"
  .catch(err => console.error(err));

With async/await (sugar syntax)

async function run() {
  try {
    const result = await myPromise;
    console.log(result); // "Done! โœ…"
  } catch (err) {
    console.error(err);
  }
}

โšก Chaining Promises

You can chain .then calls to transform values step by step:

fetch("/data.json")
  .then(res => res.json())
  .then(data => data.items)
  .then(items => console.log(items))
  .catch(err => console.error(err));

Each .then returns a new Promise, which makes chaining possible.


๐Ÿ›‘ Common Mistakes

  • Forgetting to return:
    .then(() => { doSomething(); })   // โŒ returns undefined
    .then(() => doSomething())        // โœ… returns the promise/value
    
  • Mixing callbacks + promises unnecessarily.
  • Not handling errors: Always end with .catch or use try/catch.

๐Ÿ”„ Promise Utilities

  • Promise.all([p1, p2]) โ†’ waits for all to fulfill, fails fast if one rejects.
  • Promise.race([p1, p2]) โ†’ returns the first settled (fulfilled or rejected).
  • Promise.allSettled([p1, p2]) โ†’ waits for all, returns results with status.
  • Promise.any([p1, p2]) โ†’ first fulfilled, ignores rejections until all reject.

๐Ÿ” How Promises work under the hood

  • Resolvers (resolve/reject) queue their reactions as microtasks.
  • This means .then/catch callbacks always run after the current synchronous code, but before macrotasks like setTimeout.
console.log("Start");

Promise.resolve().then(() => console.log("Microtask"));
setTimeout(() => console.log("Macrotask"), 0);

console.log("End");

Output:

Start
End
Microtask
Macrotask

โœ… Summary

  • A Promise is an object that represents future values.
  • Has 3 states: pending, fulfilled, rejected.
  • Use .then/.catch or async/await to consume.
  • Promises are scheduled as microtasks in the event loop, making them powerful for async flow control.

โœจ Promises are the foundation of async/await and modern JavaScript concurrency.

How did you like this post?

๐Ÿ‘0
โค๏ธ0
๐Ÿ”ฅ0
๐Ÿค”0
๐Ÿ˜ฎ0
JavaScript Promises Explained ยท Bitlyst