অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এবং async/await

Typescript ফাংশন অ্যান্ড কলব্যাকস - টাইপস্ক্রিপ্ট (Typescript) - Web Development

263

TypeScript, JavaScript এর উপর ভিত্তি করে কাজ করে, যা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের জন্য শক্তিশালী সমর্থন প্রদান করে। async/await একটি আধুনিক সিনট্যাক্স, যা অ্যাসিঙ্ক্রোনাস কোডকে আরো সহজ এবং পড়তে সহজ করে তোলে। এর সাহায্যে আপনি সাধারণ সিঙ্ক্রোনাস কোডের মতো অ্যাসিঙ্ক্রোনাস কোড লিখতে পারেন, তবে এটি থ্রেড ব্লকিং থেকে মুক্ত থাকে।


১. অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং (Asynchronous Programming)

অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং মূলত এমন একটি প্রোগ্রামিং পদ্ধতি যেখানে কোডের এক বা একাধিক অংশ একই সময়ে কার্যকর হতে পারে। এর মাধ্যমে আপনি I/O অপারেশন (যেমন ডাটাবেস কল, API রিকোয়েস্ট, ফাইল সিস্টেম অপারেশন ইত্যাদি) সম্পন্ন হওয়ার জন্য অপেক্ষা করতে না করে অন্যান্য কাজ করতে পারেন। এর ফলে অ্যাপ্লিকেশন দ্রুত এবং আরও কার্যকরভাবে কাজ করতে পারে।

JavaScript এবং TypeScript এ অ্যাসিঙ্ক্রোনাস কোড সাধারণত setTimeout(), Promises, এবং async/await ব্যবহার করে লেখা হয়।


২. Promises: অ্যাসিঙ্ক্রোনাস অপারেশন হ্যান্ডলিং

Promise হল একটি অবজেক্ট যা ভবিষ্যতে সম্পন্ন হতে যাওয়া একটি অ্যাসিঙ্ক্রোনাস অপারেশনকে প্রতিনিধিত্ব করে। এটি তিনটি অবস্থায় থাকতে পারে:

  • Pending: অপারেশনটি এখনো সম্পন্ন হয়নি।
  • Fulfilled: অপারেশনটি সফলভাবে সম্পন্ন হয়েছে।
  • Rejected: অপারেশনটি ব্যর্থ হয়েছে।

উদাহরণ: Promise

function fetchData(): Promise<string> {
  return new Promise((resolve, reject) => {
    let success = true;  // এটি একটি শর্ত যা সফল বা ব্যর্থ হওয়ার জন্য ব্যবহৃত হয়
    setTimeout(() => {
      if (success) {
        resolve("Data fetched successfully!");
      } else {
        reject("Error fetching data.");
      }
    }, 2000);
  });
}

fetchData().then((result) => {
  console.log(result);  // Output: Data fetched successfully!
}).catch((error) => {
  console.error(error);  // Output: Error fetching data.
});

এখানে:

  • fetchData ফাংশনটি একটি Promise রিটার্ন করে, যা ২ সেকেন্ড পরে সফল বা ব্যর্থ হতে পারে।

৩. async/await: অ্যাসিঙ্ক্রোনাস কোড লেখার আধুনিক উপায়

async/await হল একটি সিনট্যাক্স যা Promise এর উপর ভিত্তি করে কাজ করে, তবে কোডটি আরও পরিষ্কার এবং সহজে পড়া যায়। async ফাংশন একটি Promise রিটার্ন করে এবং await কিওয়ার্ডটি ব্যবহার করে আপনি Promise এর রেজাল্টের জন্য অপেক্ষা করতে পারেন, কোড ব্লক থামানো ছাড়াই।

৩.১. async ফাংশন

async কিওয়ার্ডটি ফাংশনকে একটি অ্যাসিঙ্ক্রোনাস ফাংশন হিসেবে চিহ্নিত করে। এটি একটি Promise রিটার্ন করে, যা সফল বা ব্যর্থ হওয়ার পর .then() বা .catch() মেথডের মাধ্যমে হ্যান্ডল করা যায়।

উদাহরণ: async ফাংশন

async function fetchData(): Promise<string> {
  return "Data fetched successfully!";
}

fetchData().then((result) => {
  console.log(result);  // Output: Data fetched successfully!
});

এখানে:

  • fetchData ফাংশনটি একটি async ফাংশন, যা সরাসরি একটি Promise রিটার্ন করে এবং সেই Promise কে .then() ব্যবহার করে হ্যান্ডল করা হয়।

৩.২. await কিওয়ার্ড

await কিওয়ার্ডটি async ফাংশনের মধ্যে ব্যবহার করা হয় এবং এটি Promise এর রেজাল্টের জন্য অপেক্ষা করে। যখন await একটি Promise পায়, এটি সে পর্যন্ত অপেক্ষা করে যতক্ষণ না Promise রেজল্ট হয় এবং তার পরে পরবর্তী লজিক চলে।

উদাহরণ: await কিওয়ার্ড ব্যবহার করা

async function fetchData(): Promise<string> {
  let result = await new Promise<string>((resolve, reject) => {
    setTimeout(() => resolve("Data fetched successfully!"), 2000);
  });
  return result;
}

async function displayData() {
  let data = await fetchData();
  console.log(data);  // Output: Data fetched successfully!
}

displayData();

এখানে:

  • fetchData ফাংশনটি await কিওয়ার্ড ব্যবহার করে একটি Promise রেজল্ট হতে অপেক্ষা করছে এবং তারপরে রিটার্ন হচ্ছে।
  • displayData ফাংশনটি await ব্যবহার করে fetchData ফাংশনের রেজল্টের জন্য অপেক্ষা করছে।

৪. Error Handling with async/await

async/await ব্যবহারের সময় ত্রুটি হ্যান্ডলিং করার জন্য আপনি try/catch ব্লক ব্যবহার করতে পারেন। যদি কোনো অ্যাসিঙ্ক্রোনাস অপারেশন ত্রুটি তৈরি করে, তাহলে সেটি catch ব্লকের মধ্যে ধরা যাবে।

উদাহরণ: Error Handling with async/await

async function fetchData(): Promise<string> {
  let success = false;
  if (!success) {
    throw new Error("Failed to fetch data.");
  }
  return "Data fetched successfully!";
}

async function displayData() {
  try {
    let data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error.message);  // Output: Failed to fetch data.
  }
}

displayData();

এখানে:

  • fetchData ফাংশনটি একটি ত্রুটি ছুঁড়ে ফেলছে যদি success ভেরিয়েবলটি false হয়।
  • displayData ফাংশনটি try/catch ব্লক ব্যবহার করে ত্রুটিকে হ্যান্ডল করছে।

৫. async/await এর সুবিধা

  • ক্লিন এবং পড়তে সহজ কোড: async/await ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোড লেখা অনেক সহজ এবং সিঙ্ক্রোনাস কোডের মতো দেখতে হয়।
  • এখনও পুরোপুরি অ্যাসিঙ্ক্রোনাস: কোড সিঙ্ক্রোনাস দেখালেও আসলে এটি অ্যাসিঙ্ক্রোনাসভাবেই কাজ করে, অর্থাৎ এটি মূল থ্রেড ব্লক করে না।
  • ত্রুটি হ্যান্ডলিং সহজ: try/catch ব্লক ব্যবহার করে সহজে ত্রুটি হ্যান্ডলিং করা যায়।

৬. সারাংশ

TypeScript এ async/await অ্যাসিঙ্ক্রোনাস কোড লেখার জন্য একটি আধুনিক এবং কার্যকর পদ্ধতি। async ফাংশন একটি Promise রিটার্ন করে এবং await কিওয়ার্ড দিয়ে আপনি Promise এর রেজল্টের জন্য অপেক্ষা করতে পারেন। এটি অ্যাসিঙ্ক্রোনাস কোড লেখাকে সিঙ্ক্রোনাস কোডের মতো আরও পরিষ্কার এবং সহজ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...