JavaScript Promises এবং Async/Await-এর ব্যাখ্যা
কল্পনা করুন আপনি অনলাইনে একটি পিৎজা অর্ডার করেছেন।
পিৎজা না আসা পর্যন্ত আপনি দরজায় দাঁড়িয়ে অলসভাবে বসে থাকেন না। আপনি ভিডিও দেখেন, কাজ করেন অথবা বন্ধুদের সাথে কথা বলেন। যখন পিৎজাটি আসে, আপনি সেটি খান।
JavaScript ঠিক একইভাবে কাজ করে।
API request বা database call-এর মতো কাজগুলো সম্পন্ন হতে সময় লাগে। JavaScript যদি প্রতিটি কাজের জন্য অপেক্ষা করত, তবে আপনার অ্যাপটি ফ্রিজ (freeze) হয়ে যেত। পরিবর্তে, এটি অপেক্ষারত অবস্থায় অন্যান্য কোড চালানো চালিয়ে যায়।
একটি Promise এমন একটি মান (value) নির্দেশ করে যা ভবিষ্যতে আসবে।
একটি Promise-এর তিনটি অবস্থা (state) থাকে:
- Pending
- Fulfilled (সফল)
- Rejected (ব্যর্থ)
আপনি খুব কমই নতুন Promise তৈরি করার কোড দেখতে পাবেন। এর কারণ হলো fetch() এর মতো আধুনিক টুলগুলো আপনার জন্য ইতিমধ্যেই একটি Promise রিটার্ন করে।
.then() কী করে?
অনেকে মনে করেন .then() ডেটা সংগ্রহ (retrieve) করে। আসলে তা নয়।
.then() একটি callback function রেজিস্টার করে। আপনি JavaScript-কে বলছেন: "যখন এই Promise-টি শেষ হবে, তখন এই ফাংশনটি চালাও।"
এটি একটি ডেলিভারি অ্যাপের মতো। আপনি খাবার অর্ডার করেন এবং অ্যাপটি বলে: "খাবারটি যখন আসবে তখন আমাকে কল করো।" ফাংশনটি ফলাফলের জন্য অপেক্ষা করে।
কেন Async/Await ব্যবহার করবেন?
আপনি ইউজার ডেটা, তারপর পোস্ট এবং তারপর কমেন্ট পাওয়ার জন্য .then() কলগুলোকে চেইন (chain) করতে পারেন। এটি কাজ করে, কিন্তু লম্বা চেইনগুলো পড়া কঠিন।
Async/await কোডকে সাধারণ, ধাপে ধাপে চলা কোডের মতো দেখায়। এটি আরও পরিষ্কার এবং অনুসরণ করা সহজ।
await কি JavaScript-কে ব্লক করে?
এটি একটি সাধারণ ইন্টারভিউ প্রশ্ন। উত্তর হলো—না।
যখন JavaScript একটি await কিওয়ার্ডে পৌঁছায়, তখন এটি শুধুমাত্র সেই নির্দিষ্ট async ফাংশনটিকে থামিয়ে দেয় (pause)। আপনার অ্যাপ্লিকেশনের বাকি অংশ চলতে থাকে।
উদাহরণস্বরূপ কাজের প্রবাহ:
- async ফাংশনের কোড চালানো।
await-এ পৌঁছানো এবং সেই ফাংশনটিকে থামিয়ে দেওয়া।- অ্যাপ্লিকেশনের বাকি অংশ চালানো।
- কাজ শেষ হলে, async ফাংশনটি পুনরায় শুরু করা।
Async/await হলো Promise লেখার একটি পরিচ্ছন্ন উপায় মাত্র। এটি একটি syntactic sugar।
মূল বিষয়গুলো:
- Promise = একটি ভবিষ্যৎ মান (future value)।
fetch()= একটি Promise রিটার্ন করে।.then()= প্রস্তুত হলে এটি চালাও।await= শুধুমাত্র এই ফাংশনটিকে থামাও, পুরো প্রোগ্রামকে নয়।- async/await = Promise লেখার পরিচ্ছন্ন সিনট্যাক্স (syntax)।
উৎস: https://dev.to/aarthirs/javascript-promises-asyncawait-explained-with-a-real-life-example-43bm