Promise Chaining এবং Error Handling

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

266

Promise ES6 এর একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার, যা asynchronous কোডকে আরও পরিপূর্ণ এবং পরিষ্কারভাবে পরিচালনা করতে সাহায্য করে। Promise Chaining এবং Error Handling এর মাধ্যমে আপনি asynchronous অপারেশনগুলোকে সহজে এবং সঠিকভাবে সম্পন্ন করতে পারেন।


Promise Chaining

Promise Chaining হল একাধিক asynchronous অপারেশনকে একসাথে লিঙ্ক বা চেইন করা, যেখানে এক অপারেশন শেষ হওয়ার পর পরবর্তী অপারেশনটি স্বয়ংক্রিয়ভাবে শুরু হয়। এটি Promise এর then() মেথড ব্যবহার করে করা হয়, যেখানে আপনি একটি Promise এর রেজাল্ট গ্রহণ করেন এবং সেটি পরবর্তী অপারেশনে প্রেরণ করেন।

Promise Chaining এর উদাহরণ:

const fetchData = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data fetched"), 1000);
});

fetchData
  .then(result => {
    console.log(result);  // "Data fetched"
    return "Next step";
  })
  .then(result => {
    console.log(result);  // "Next step"
    return "Final step";
  })
  .then(result => {
    console.log(result);  // "Final step"
  })
  .catch(error => {
    console.log("Error:", error);  // If any error occurs, it will be caught here
  });

এখানে, প্রথম Promise সফলভাবে রেজাল্ট প্রদান করার পর, প্রতিটি then() ব্লক একে একে চালানো হয়, এবং প্রত্যেকটি পরবর্তী then() পূর্ববর্তী Promise এর রেজাল্ট গ্রহণ করে।


Error Handling in Promises

যেহেতু asynchronous কোডে অনেক সময় error হতে পারে, তাই Promise এর মধ্যে Error Handling অত্যন্ত গুরুত্বপূর্ণ। Promise এর সাথে error handling করার জন্য catch() মেথড ব্যবহার করা হয়, যা Promise চেইন করার সময় যে কোনো ধরনের error ধরতে সাহায্য করে।

Error Handling এর উদাহরণ:

const fetchData = new Promise((resolve, reject) => {
  const success = false;
  setTimeout(() => {
    if (success) {
      resolve("Data fetched successfully");
    } else {
      reject("Data fetching failed");
    }
  }, 1000);
});

fetchData
  .then(result => {
    console.log(result);  // This won't be executed if the promise is rejected
  })
  .catch(error => {
    console.log("Error:", error);  // "Error: Data fetching failed"
  });

এখানে, fetchData Promise এর মধ্যে যদি কোনো ত্রুটি ঘটে (যেমন reject() কল করা হয়), তবে সেই ত্রুটি catch() ব্লক দ্বারা ধরা হবে।


Promise Chaining এবং Error Handling এর সাথে Combined Example

আপনি Promise Chaining এবং Error Handling একত্রিত করে আরও উন্নত asynchronous কোড লিখতে পারেন। একাধিক asynchronous অপারেশন চেইন করতে পারেন এবং ত্রুটিগুলোকে সঠিকভাবে ধরতে পারেন।

Combined Example:

const fetchData = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data fetched"), 1000);
});

const processData = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data processed"), 1000);
});

const saveData = new Promise((resolve, reject) => {
  setTimeout(() => reject("Saving data failed"), 1000);
});

fetchData
  .then(result => {
    console.log(result);  // "Data fetched"
    return processData;
  })
  .then(result => {
    console.log(result);  // "Data processed"
    return saveData;
  })
  .then(result => {
    console.log(result);  // This won't be executed due to the rejection
  })
  .catch(error => {
    console.log("Error:", error);  // "Error: Saving data failed"
  });

এখানে, প্রথম দুটি Promise সফলভাবে রেজাল্ট প্রদান করে, কিন্তু saveData Promise ত্রুটি ঘটায়। সেই কারণে, catch() ব্লকটি ত্রুটি ধরে নিয়ে "Saving data failed" মেসেজটি প্রিন্ট করবে।


Promise.all() এবং Error Handling

যখন আপনি একাধিক asynchronous অপারেশন একসাথে চালাতে চান, তখন Promise.all() ব্যবহার করা হয়। এটি সব Promise সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করে এবং সবগুলো Promise সফল হলে রেজাল্ট প্রদান করে। যদি একটি Promise ত্রুটি দেয়, তবে তা সকল Promise গুলোর ফলাফলকে ব্যর্থ করে দেয়।

Promise.all() এর উদাহরণ:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data fetched"), 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data processed"), 1000);
});

const promise3 = new Promise((resolve, reject) => {
  setTimeout(() => reject("Error in saving data"), 1000);
});

Promise.all([promise1, promise2, promise3])
  .then(results => {
    console.log(results);  // This won't be executed if any promise rejects
  })
  .catch(error => {
    console.log("Error:", error);  // "Error: Error in saving data"
  });

এখানে, promise3 ত্রুটি ঘটাচ্ছে, তাই catch() ব্লকটি সক্রিয় হবে এবং ত্রুটির বার্তা প্রিন্ট করবে।


Promise.race()

Promise.race() ফাংশনটি একাধিক Promise এর মধ্যে যে কোনো একটি Promise সবচেয়ে দ্রুত সম্পন্ন হবে তার ফলাফল প্রদান করে। যদি প্রথম Promise ত্রুটি দেয়, তবে সেই ত্রুটি ধরা হয়।

Promise.race() এর উদাহরণ:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data fetched"), 2000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data processed"), 1000);
});

Promise.race([promise1, promise2])
  .then(result => {
    console.log(result);  // "Data processed" (Because promise2 resolves first)
  })
  .catch(error => {
    console.log("Error:", error);
  });

এখানে, promise2 প্রথমে সম্পন্ন হয়, তাই তার রেজাল্ট Data processed প্রিন্ট হবে।


সারাংশ

Promise Chaining এবং Error Handling ES6 এ asynchronous কোড পরিচালনার জন্য অত্যন্ত কার্যকরী ফিচার। Promise Chaining দ্বারা আপনি একাধিক asynchronous অপারেশন একে একে সম্পন্ন করতে পারেন এবং Error Handling দ্বারা ত্রুটিগুলো সঠিকভাবে ধরতে পারেন। Promise.all(), Promise.race() এর মত ফাংশনগুলি আরও বেশি নিয়ন্ত্রণ এবং সমন্বয় প্রদান করে asynchronous কোডে।

Content added By
Promotion

Are you sure to start over?

Loading...