JavaScript Async/Await — Callback Hell থেকে মুক্তির পথ
Callback, Promise, Async/Await — JavaScript-এর asynchronous programming ধারাবাহিকভাবে শিখুন। কোনটি কখন ব্যবহার করবেন এবং common mistakes কীভাবে এড়াবেন।
JavaScript-এ asynchronous programming একটি অপরিহার্য concept। API থেকে data আনা, file পড়া, database query — সব কিছুই asynchronous। কিন্তু এটি সঠিকভাবে না জানলে "callback hell" বা অপ্রত্যাশিত bugs-এ পড়তে হয়।
Callback — শুরু যেখানে
Callback হলো একটি function যা অন্য function-এ pass করা হয় এবং পরে call করা হয়। সহজ ক্ষেত্রে ঠিক আছে, কিন্তু nested callback-এ পড়লে code পড়া কঠিন হয়ে যায় — এটিই "Callback Hell"।
Promise — একটু উন্নতি
Promise হলো একটি object যা একটি async operation-এর eventual completion বা failure represent করে। তিনটি state: pending, fulfilled, rejected।
.then() দিয়ে success handle করুন, .catch() দিয়ে error handle করুন। Promise.all() দিয়ে একসাথে অনেক promise run করুন।
Async/Await — সবচেয়ে সহজ
Async/Await হলো Promise-এর উপর built একটি syntactic sugar। Code দেখতে synchronous-এর মতো কিন্তু আসলে asynchronous।
একটি function-এর আগে async লিখলে সেটি Promise return করে। সেই function-এর ভেতরে await দিয়ে Promise resolve হওয়ার অপেক্ষা করা যায়।
Error Handling
Async/Await-এ error handle করতে try-catch ব্যবহার করুন। await করা কোনো Promise reject হলে catch block-এ আসবে।
সব async function-এ try-catch রাখা ভালো practice, না হলে unhandled promise rejection হতে পারে।
Parallel vs Sequential
দুটি independent API call করলে sequential-এ দুটো আলাদা await করবেন না — এতে অনেক সময় নষ্ট হয়। Promise.all() দিয়ে parallel-এ run করুন।
Common Mistakes
awaitloop-এর ভেতরে ব্যবহার করা —Promise.all()দিয়ে করুন- Error handle না করা
- Async function-এর return value Promise মনে না রাখা
- Race condition — একাধিক async operation-এ state conflict
Real World Example
একটি news app-এ user login করলে তার profile, recent orders, notifications — এই তিনটি API call আলাদাভাবে করতে হয়। Promise.all() দিয়ে তিনটি একসাথে করলে loading time তিনভাগের একভাগে নেমে আসে।