Callbacks & Callback Hell
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 = "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
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 haiNode.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