Async Programming — Callback, Promise, async/await
Callback, Promise, async/await, error handling — Node.js-এ asynchronous programming বাংলায়।
Node.js non-blocking — অর্থাৎ file read, database query, API call এসব async কাজ। এগুলো handle করতে callbacks, Promises, ও async/await ব্যবহার হয়।
Callback
Callback হলো একটি function যা অন্য একটি function-কে argument হিসেবে দেওয়া হয় এবং কাজ শেষে call করা হয়।
const fs = require("node:fs");
// Callback style
fs.readFile("data.txt", "utf8", (err, data) => {
if (err) {
console.error("ত্রুটি:", err);
return;
}
console.log(data);
});Callback Hell
// ❌ Callback Hell — পড়া কঠিন
getUser(id, (user) => {
getOrders(user.id, (orders) => {
getOrderDetails(orders[0].id, (details) => {
getShipping(details.id, (shipping) => {
console.log(shipping);
});
});
});
});Promise
Promise হলো async কাজের ভবিষ্যৎ ফলাফল-এর প্রতিনিধিত্ব। এটি তিনটি state-এ থাকতে পারে: pending, fulfilled, rejected।
const getUser = (id) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id > 0) {
resolve({ id, name: "রহিম" });
} else {
reject(new Error("Invalid ID"));
}
}, 1000);
});
};
getUser(1)
.then((user) => console.log("ব্যবহারকারী:", user.name))
.catch((err) => console.error(err.message))
.finally(() => console.log("সম্পন্ন"));async/await
async/await হলো Promise-এর সবচেয়ে পরিষ্কার syntax। async function সবসময় Promise return করে, আর await দিয়ে Promise resolve হওয়া পর্যন্ত অপেক্ষা করা যায়।
async function getUserData(id) {
try {
const user = await getUser(id);
const orders = await getOrders(user.id);
const details = await getOrderDetails(orders[0].id);
return details;
} catch (error) {
console.error("ত্রুটি:", error.message);
throw error;
}
}
// ব্যবহার
const data = await getUserData(1);
console.log(data);Promise.all, Promise.race
// সব Promise একসাথে run
const [users, posts] = await Promise.all([
fetchUsers(),
fetchPosts(),
]);
// যেটি আগে শেষ হয়
const fastest = await Promise.race([
fetchFromCDN1(),
fetchFromCDN2(),
]);
// সব resolved/rejected হলে
const results = await Promise.allSettled([
fetchUsers(),
fetchPosts(),
]);সবসময় try/catch দিয়ে async error handle করুন। Promise.all ব্যবহার করার সময় একটি reject হলে সব fail হবে — Promise.allSettled বিকল্প হিসেবে ব্যবহার করুন।