Error Handling in Async/Await

Async/Await - জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

370

ES6 এ async এবং await এর মাধ্যমে asynchronous কোড লেখা আরও সহজ এবং পরিষ্কার হয়েছে। এগুলো Promise এর সাথে কাজ করে, কিন্তু এর মাধ্যমে callback function ব্যবহার ছাড়াই asynchronous কোড সহজভাবে লেখা সম্ভব। তবে, যখন asynchronous কোডে কোনো ভুল (error) ঘটে, তখন try এবং catch ব্লক ব্যবহার করে ত্রুটি পরিচালনা (error handling) করা হয়।


Async/Await এর মাধ্যমে Error Handling

async এবং await এর সাথে error handling করতে try/catch ব্লক ব্যবহার করা হয়। এই ব্লকটি Promise এর rejection বা অন্যান্য runtime errors ধরতে সাহায্য করে।


Async/Await: Basic Syntax

async ফাংশন Promise ফিরিয়ে দেয় এবং await কে ব্যবহার করে আপনি Promise এর ফলাফল (resolved value) পেতে পারেন।

উদাহরণ:

async function fetchData() {
  let result = await fetch('https://jsonplaceholder.typicode.com/posts');
  let data = await result.json();
  console.log(data);
}

এখানে, await ফাংশন fetch() এবং result.json() এর সাথে কাজ করছে।


Error Handling in Async/Await

যখন asynchronous কোডে কোনো সমস্যা হয়, যেমন কোনো নেটওয়ার্ক সমস্যা বা API ত্রুটি (error), তখন সেই ভুল ধরা এবং প্রক্রিয়া করা খুবই গুরুত্বপূর্ণ। try/catch ব্লক ব্যবহার করে আপনি এই ত্রুটিগুলো ধরতে এবং সঠিকভাবে হ্যান্ডেল করতে পারেন।

উদাহরণ:

async function fetchData() {
  try {
    let response = await fetch('https://jsonplaceholder.typicode.com/posts');
    
    // যদি Response ঠিক না থাকে, তবে error throw করা হবে
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }

    let data = await response.json();
    console.log(data);
  } catch (error) {
    // কোনো error ঘটলে, catch block এ চলে যাবে
    console.error('There was an error!', error);
  }
}

fetchData();

এখানে, try ব্লকে asynchronous কোড লেখা হয়েছে এবং catch ব্লকে সেই কোডে কোনো ভুল হলে (যেমন: নেটওয়ার্ক সমস্যা বা invalid response) error ধরা হবে।


Error Handling: Multiple Async Calls

যদি একাধিক asynchronous call থাকে এবং তাদের মধ্যে কোনো একটি call ত্রুটি (error) ঘটায়, তাহলে সেগুলোও try/catch ব্লকের মাধ্যমে নিরাপদভাবে হ্যান্ডেল করা যায়।

উদাহরণ:

async function fetchMultipleData() {
  try {
    let postsResponse = await fetch('https://jsonplaceholder.typicode.com/posts');
    let usersResponse = await fetch('https://jsonplaceholder.typicode.com/users');

    if (!postsResponse.ok) {
      throw new Error('Failed to fetch posts');
    }
    
    if (!usersResponse.ok) {
      throw new Error('Failed to fetch users');
    }

    let posts = await postsResponse.json();
    let users = await usersResponse.json();

    console.log('Posts:', posts);
    console.log('Users:', users);
    
  } catch (error) {
    console.error('Error occurred:', error);
  }
}

fetchMultipleData();

এখানে, দুইটি asynchronous call (posts এবং users) রয়েছে। যদি কোনো একটি call ত্রুটি (error) ঘটায়, তাহলে তা catch ব্লক দ্বারা হ্যান্ডেল করা হবে।


Error Handling with Async/Await in Parallel

কখনও কখনও, আমরা asynchronous calls গুলো parallel (একই সময়ে) চালাতে চাই, কিন্তু যখন কোনো একটা call ত্রুটি ঘটবে, তখন সেটা handle করা খুবই গুরুত্বপূর্ণ। Promise.all() ব্যবহার করা যেতে পারে multiple async calls কে parallel চালানোর জন্য।

উদাহরণ:

async function fetchDataInParallel() {
  try {
    const [posts, users] = await Promise.all([
      fetch('https://jsonplaceholder.typicode.com/posts'),
      fetch('https://jsonplaceholder.typicode.com/users')
    ]);

    if (!posts.ok) {
      throw new Error('Failed to fetch posts');
    }

    if (!users.ok) {
      throw new Error('Failed to fetch users');
    }

    const postsData = await posts.json();
    const usersData = await users.json();

    console.log('Posts:', postsData);
    console.log('Users:', usersData);
  } catch (error) {
    console.error('Error occurred:', error);
  }
}

fetchDataInParallel();

এখানে Promise.all() ব্যবহার করা হয়েছে যাতে দুটি ফেচ অপারেশন একসাথে চলতে পারে। যদি কোনো একটি অপারেশন ত্রুটি ঘটায়, তখন catch ব্লক তা ধরবে।


Custom Error Handling

আপনি আপনার own custom error তৈরি এবং throw করতে পারেন যখন প্রয়োজন হয়। ES6 এ throw কিওয়ার্ড ব্যবহার করে custom error তৈরি করা যায়।

উদাহরণ:

async function fetchData() {
  try {
    let response = await fetch('https://jsonplaceholder.typicode.com/invalid-url');

    if (!response.ok) {
      throw new Error('Custom error: Unable to fetch data');
    }

    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.error(error.message);  // "Custom error: Unable to fetch data"
  }
}

fetchData();

এখানে, যদি fetch এর রেসপন্স সঠিক না হয়, তখন throw new Error() দিয়ে একটি কাস্টম error তৈরি করা হয়েছে।


উপসংহার

ES6 async এবং await এর মাধ্যমে asynchronous কোড লেখা আরও সহজ হয়েছে। এবং try/catch ব্লক ব্যবহার করে আপনি এর সাথে error handling করতে পারেন। এর মাধ্যমে asynchronous অপারেশনগুলো আরো কার্যকর এবং নিরাপদভাবে পরিচালিত হয়, এবং কোডের রিডেবিলিটি বাড়ে।

Content added By
Promotion

Are you sure to start over?

Loading...