জাভাস্ক্রিপ্টের Asynchronous Programming

জাভাস্ক্রিপ্ট মানে শুধু কাজ নয়, কাজের ভেতর আরেক কাজ! ভাবছেন কিভাবে? ঠিক ধরেছেন, আজকে আমরা শিখব জাভাস্ক্রিপ্টের Asynchronous Programming আর Promises নিয়ে। আরে ভাই, এটার নাম শুনে ভয় পেলে চলবে না! আমি আছি না? চা খেতে খেতে মজা করে...

আরিফ আলমাছ

আরিফ আলমাছ

ওয়েব ডেভেলপার

📅৩০ আগস্ট, ২০২৪

🚦 Asynchronous Programming - কাহিনীটা কি?

ধরা যাক, আপনি একটা হোটেলে গেছেন। মেনু হাতে নিয়ে বসেছেন আর ভাবছেন যে কি খাবেন। ওদিকে হোটেলওয়ালা কিন্তু বসে নেই, সে অন্যদেরও অর্ডার নিচ্ছে, রান্না করছে, খাবার পরিবেশন করছে। এক সাথে একাধিক কাজ হচ্ছে, তাই না? একেই বলে Asynchronous Programming!

জাভাস্ক্রিপ্ট হল একটিমাত্র থ্রেড (Single-threaded), মানে একসাথে একটা কাজ করতে পারে। কিন্তু যখন আমাদের অল্প সময়ের ভেতর অনেক কাজ করতে হয় (যেমন: ডাটা ফেচ করা, ইমেজ লোড করা), তখন আমাদের একটু বুদ্ধি খাটিয়ে করতে হয়।

🔄 Callbacks - প্রথম আশ্রয়:

একটু সময়ের জন্য ভাবুন যে আপনি হোটেলে অর্ডার দিয়েছেন আর আপনার প্লেট রেডি হতে সময় লাগবে। এখন যদি আপনি বসে বসে সেই প্লেটের অপেক্ষা করেন, তাহলে বাকি কাজগুলো কি হবে? সেই জন্য, আমরা বলি যে, ভাই, তুমি কাজ করো, প্লেট রেডি হলে আমাকে ডাক দিয়ো! ঠিক সেভাবে, জাভাস্ক্রিপ্টে আমরা callbacks ব্যবহার করি।

console.log("কাজ শুরু!");
 
setTimeout(() => {
  console.log("তিন সেকেন্ড পরে!");
}, 3000);
 
console.log("আরও কাজ চলতে থাকবে...");

উপরে setTimeout দিয়ে আমরা একটা callback পাঠালাম। মানে, ৩ সেকেন্ড পরেই তুমি এই কাজ করবা। Meanwhile, অন্য কাজ চলতে থাকুক।

🤹‍♂️ Promises - প্রমিজটা রাখবো তো?

এখন ধরুন যে, হোটেলওয়ালা যদি বলেন যে, "দেখেন ভাই, আমরা আপনার খাবার ঠিক ২০ মিনিটের মধ্যেই এনে দেবো"। এর মানে আপনি ঠিক জানেন যে, ২০ মিনিট পরেই খাবার আসবে। কিন্তু মাঝখানে তিনি যদি কথা না রাখেন? এখানেই প্রমিজের প্যাচ!

জাভাস্ক্রিপ্টে Promise হলো এমন একটা অবজেক্ট যেটা বলে, "ভাই, আমি তোকে একটা প্রমিজ দিলাম, কাজটা হবে। হয় সফল হবে, নয়তো ব্যর্থ হবে।" চলুন একটু Promise দেখি:

let myPromise = new Promise((resolve, reject) => {
  let foodReady = true; // ধরে নিলাম যে খাবার রেডি!
 
  if (foodReady) {
    resolve("খাবার তৈরি! খেতে বসেন!");
  } else {
    reject("মাফ করবেন ভাই, রান্নাটা পোড়া গেছে!");
  }
});
 
myPromise
  .then((message) => {
    console.log("Success: " + message);
  })
  .catch((error) => {
    console.log("Error: " + error);
  });

এখানে, resolve হলো সেই ওয়েটার যে খাবার এনে বলে "খাবার তৈরি!" আর reject সেই বন্ধুটি যে এসে বলে "ভাই, মাফ করবেন। খিচুড়িটা বৃষ্টিতে ভিজে গেছে!"

💡 Async / Await - জাস্ট একটা ম্যাজিক!

Promise দিয়ে কাজ করতে গিয়ে কখনও কখনও মনে হতে পারে, আহ! অনেক কাজ, একটু সহজে হবে না? এজন্যই এসেছে async/await

async ফাংশন বলছে যে, "আমি ভাই একটু ধৈর্য ধরে কাজ করবো", আর await বলছে "তুমি ভাই একটু দাঁড়াও, আমি কাজটা শেষ করি।"

async function serveDinner() {
  try {
    let food = await myPromise;
    console.log(food);
  } catch (error) {
    console.log("Error: " + error);
  }
}
 
serveDinner();

এই serveDinner ফাংশন পুরো গল্পটাই সরল করে দিলো! এখানে কোনো প্যাঁচ নেই, সোজা কথা, তুমি বসে বসে অপেক্ষা করো আর কাজ শেষ হলেই আমি তোকে জানাবো।

🎉 উপসংহার: আসল মজা তো এখানেই!

এখন তো বুঝলেন যে, Asynchronous Programming আর Promises জাভাস্ক্রিপ্টের মস্ত মস্ত ফিচার! এগুলো ছাড়া তো আমাদের কাজের পরিবেশটাই জমবে না! তাই জাভাস্ক্রিপ্টে কাজ করতে হলে এগুলো জানা অত্যন্ত জরুরি। একবার বোঝা হলে আর মাথায় ঢুকে গেলে, মনে হবে আরে! এত সহজ! এক্কেবারে ঝংকার ভাইয়ের মত ঝংকারে ঝংকারে কোডিং করতে পারবেন!

এখনই একটু সময় নিয়ে এঁদের সাথে বন্ধুত্ব পাতিয়ে নিন, Promise করছি, সামনে এক্সপার্ট হয়ে যাবেন! 😉