📞
Asynchronous JS

Callbacks & Callback Hell

Async Ka Purana Tareeka
💡 Callback ek "jab kaam ho jaaye, mujhe bata dena" instruction hai — jaise restaurant mein order dene ke baad, tumhe token milta hai, aur jab khana ready ho, tumhe bulaya jaata hai (callback), tum kitchen ke bahar khada wait nahi karte (blocking).

JavaScript "single-threaded" hai — ek time par ek hi kaam kar sakta hai. Async operations (jaise file read, network request) ko "blocking" nahi hona chahiye (warna poori website freeze ho jaayegi) — isliye callback pattern use hota hai: operation shuru karo, JavaScript aage badh jaata hai, jab operation complete ho, callback function CALL hota hai.

"Callback hell" tab hota hai jab MULTIPLE async operations sequentially chahiye hoti hain — callbacks ke andar callbacks, deeply nested, hard-to-read code ("pyramid of doom"). Promises/async-await (aage aayenge) isi problem ko solve karte hain.

console.log("1. Shuru");

setTimeout(() => {
  console.log("2. 2 second baad (async)");
}, 2000);

console.log("3. Ye pehle chalega!");

// Output order: 1, 3, 2 — async code turant "block" nahi karta

// Callback hell example (avoid karo):
// getUser(id, (user) => {
//   getPosts(user.id, (posts) => {
//     getComments(posts[0].id, (comments) => {
//       console.log(comments);   // 3 levels deep nesting!
//     });
//   });
// });
📞
Callback ek "jab kaam ho jaaye, mujhe bata dena" instruction hai — jaise restaurant mein order dene ke baad, tumhe token milta hai, aur jab khana ready ho, tumhe bulaya jaata hai (callback), tum kitchen ke bahar khada wait nahi karte (blocking).
1 / 6
⚡ Quick Recap
  • Callback = "jab async kaam khatam ho, ye function chalao"
  • JavaScript single-threaded hai — async operations blocking nahi hote
  • Callback hell = deeply nested callbacks, hard to maintain
Is page mein (2 subtopics)

JavaScript single-threaded hai, lekin "event loop" ki wajah se async operations kaam karte hain — async operations (setTimeout, fetch) browser/Node APIs ko delegate ho jaate hain, main thread free rehta hai, aur complete hone par callback "queue" mein jaata hai, jo event loop process karta hai jab main thread khaali ho.

console.log("1");
setTimeout(() => console.log("2"), 0);   // 0ms delay bhi, phir bhi baad mein chalega!
console.log("3");

// Output: 1, 3, 2
// Kyunki setTimeout callback event loop ke through jaata hai,
// synchronous code (1, 3) hamesha pehle complete hota hai
💡Tip: Ye "0ms setTimeout phir bhi baad mein chalta hai" ek famous interview question hai — event loop deep-dive Advanced JavaScript category mein aayega.

Node.js mein ek convention hai callbacks ka pehla parameter "error" ke liye reserve karna — callback(error, result) — agar error null hai, operation successful thi, warna error object hai.

function readFileCallback(err, data) {
  if (err) {
    console.log("Error hui: " + err.message);
    return;
  }
  console.log("Data: " + data);
}

// fs.readFile("file.txt", "utf8", readFileCallback);  — Node.js pattern
💡Tip: Ye pattern purane Node.js APIs mein bahut common hai — modern Node.js mein promise-based versions (fs.promises) available hain jo async/await ke saath better kaam karte hain.