promise and asynchronous programming

promise and asynchronous programming

আমরা অনেক প্রোগ্রামার আছি যাদের asynchronous প্রোগ্রামিং এবং প্রমিজ নিয়ে তেমন খুব বেশি ধারনা নেই । তবে এটা এতটাও কঠিন না যে আমরা বুঝতে পারব না বা শিখে ফেলতে পারব না । সমস্যা হচ্ছে আমাদের যারা শেখায় তাদের এই বিষয়টা কঠিন করে বুঝানোর কারণে অনেক প্রোগ্রামর ভয় পেয়ে যায় । এবং কাজের কাজ চলার জন্য যতটুকই দরকার সেই কোডের সিনট্যাক্স মুখস্ত করে কাজ চালিয়ে নেয় ।

আজকে এই ভয় টা কিছুটা জয় করা জাঁক কয়েকটা কোড বোঝার মাধ্যমে ।

প্রথমে Promise নিয়ে কিছু কথা বলা যাক । Promise এটা অবজেক্ট । Promise মূলত ২ টা আর্গুমেন্ট পেয়ে থাকে । একটা resolve আর একটা reject . resolve মূলত Promise ফুলফিল্ড হওয়াকে বুঝায় । আর ফুলফিল্ড না হলে তাকে reject দিয়ে হেন্ডেল করতে পারি ।


const isResolved = true;
const promise = new Promise((resolve, reject) => {
 if (isResolved) {
  resolve("completed");
 } else {
  reject("message");
 }
});

console.log(promise);

promise
 .then((result) => {
  console.log(result);
 })
 .catch((err) => {
  console.log(err + "rejected");
 });

এখন একটু আর কিছু উদাহরণ দেখে নেই । যেটা খুব কাজে লাগবে না তবে দেখে রাখা ভালো । --> আমরা একটা টেক্সটকে কিভাবে প্রমিসে কনভার্ট করতে পারি ?

const name = "rashedul"
const nameOfPromise = Promise.resolve(name)
console.log(nameOfPromise)

এটা হয়ত কিছুই তেমন বুঝা যাচ্ছে না , বুঝার সুবিধারতে এখানে একটা ইমেজ অ্যাড করা হল ।

এখন হয়ত খুব ভালো ভাবেই বুঝতে পারছেন যে কিভাবে কি কাজ হচ্ছে । এখন আমরা নেক্সট উদাহরণে চলে যাচ্ছি । যেটা আমরা ফাংশনের মাধ্যমে Promise কেস হেন্ডেল করা ।


function wait(ms) {
 const promise = new Promise((resolve, reject) => {
  setTimeout(resolve, ms);
 });
 return promise;
}

wait(200)
 .then(() => {
  console.log("done in 200 ms");
 })
 .catch((err) => {
  console.log(err);
 });

ex : ধরুন আমাদের এমন এটা কাজ করতে হবে যেটা promise এঁর মাধ্যমে । এবং কাজটা এমন যে , প্রথমে একটা API থেকে একটা ইউজারের ডাটা আসবে । সেট ইউজার এঁর ID এঁর ভিত্তিতে সেই ইউজার এঁর পোস্ট গুলো আনতে হবে । এবং সেই পোস্ট এঁর আন্ডারে যত কমেন্ট আছে সেগুলো আনতে হবে তাহলে আমরা কিভাবে এই কাজটা করেতে পারি ?

const get = (url)  => Promise.resolve()
get('/users/userName=rashedul')
.then(user=>{
   return get(`/posts/user_id=${user.id}`)
})
.then(posts=>{
    const letestPosts = posts[0]
    return get(`/comments?post_id=${letestPosts.id}`)
})
.catch(err=>{
    console.log(err)
})

এইভাবে আমরা কাজটা করতে পারি । তবে এটা অনেক আগের সিনট্যাক্স এইভাবেই আগের জাভাস্ক্রিপ্ট এ কাজ করা হত । ২০১৫ এঁর মত থেকে কিছু আধুনিক জিনিস জাভাস্ক্রিপ্ট অ্যাড হয়েছে । যেটা আমরা asyncronus নামে চিনি । এখন আমরা এই প্রবলেমটা asyncronus প্রোগ্রামিং এঁর মাধ্যমে করে দেখব যে আমাদের প্রোগ্রামারদের কাজ কতটা সহজ হয়ে গেছে ।

তার আগে আমরা একটা ইমেজ দেখে আশি ।

No description available.

এখানে একটা নরমাল ফাংশন undefined রিটার্ন করছে । আর একটা async ফাংশন একটা Promise রিটার্ন করছে । যেহেতু আমাদের async ফাংশন টা Promise রিটার্ন তাই আগের কাজটা আমরা async, await দিয়ে করে ফেলতে পারি ।

async function getData(userName){
   try{
    const mainUser = await get(`/users/userName=${userName}`)
    const posts = await get(`/posts/user_id=${user.id}`)
    const comments = await get(`/comments?post_id=${letestPosts.id}`)
    const user = await get(`/users?userName=${comments[0].userName}`)
    console.log(user)
   }catch(err=>{
    console.log(err)
   })
}
getData("rashedul")

Did you find this article valuable?

Support Rashedul's Article by becoming a sponsor. Any amount is appreciated!