Multiple Promises হ্যান্ডলিং

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

288

ES6-এ Promise ব্যবহারের মাধ্যমে অ্যাসিঙ্ক্রোনাস অপারেশনগুলো সহজে এবং কার্যকরভাবে পরিচালনা করা সম্ভব। তবে, যখন একাধিক Promise থাকে এবং আপনাকে সবগুলো Promise-এর ফলাফল একসাথে পেতে হয়, তখন কিছু নির্দিষ্ট পদ্ধতি ব্যবহার করা হয়। ES6 এবং পরবর্তী সংস্করণে Promise.all(), Promise.allSettled(), Promise.race(), এবং Promise.any() এর মাধ্যমে একাধিক Promise হ্যান্ডলিং করা যায়।

এখানে, আমরা Multiple Promises হ্যান্ডলিংয়ের বিভিন্ন পদ্ধতি নিয়ে আলোচনা করব।


Promise.all()

Promise.all() একাধিক Promise গুলোকে একসাথে হ্যান্ডল করে এবং একটি নতুন Promise রিটার্ন করে। এটি শুধুমাত্র তখনই fulfilled (সম্পূর্ণ) হবে, যখন সবটি Promise সম্পন্ন হবে। যদি কোনো একটি Promise rejected হয়, তবে পুরো Promise.all() কলটি rejected হয়ে যাবে।

Promise.all() এর ব্যবহার:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, "First Promise");
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, "Second Promise");
});
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, "Third Promise");
});

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values); // ["First Promise", "Second Promise", "Third Promise"]
  })
  .catch(error => {
    console.log(error);
  });

এখানে, Promise.all() তিনটি Promise একসাথে সমাধান করবে এবং তিনটি Promise এর ফলাফল একটি অ্যারেতে রিটার্ন করবে। যদি কোনো Promise rejected হয়, তাহলে catch() ব্লকটি কল হবে।

Promise.all() এর ক্ষেত্রে সতর্কতা:

  • যদি কোনো একটি Promise rejected হয়, তবে পুরো Promise.all() ফাংশন rejected হবে এবং এর সমস্ত resolved ফলাফল উপেক্ষা করা হবে।

Promise.allSettled()

Promise.allSettled() সমস্ত Promise শেষ হবার পর তাদের ফলাফল জানায়, সেটা fulfilled বা rejected যাই হোক না কেন। এটি একটি নতুন Promise রিটার্ন করে এবং প্রত্যেকটি Promise এর ফলাফল একটি অবজেক্ট হিসেবে প্রদান করে যার মধ্যে থাকে:

  • status: fulfilled বা rejected
  • value: যদি Promise fulfilled হয়, তাহলে ফলাফল
  • reason: যদি Promise rejected হয়, তাহলে ত্রুটি বার্তা

Promise.allSettled() এর ব্যবহার:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, "First Promise");
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(reject, 2000, "Second Promise failed");
});
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, "Third Promise");
});

Promise.allSettled([promise1, promise2, promise3])
  .then(results => {
    results.forEach(result => {
      if (result.status === "fulfilled") {
        console.log(result.value); // Success
      } else {
        console.log(result.reason); // Error
      }
    });
  });

এখানে, Promise.allSettled() সব Promise এর ফলাফল (সফল বা ব্যর্থ) দেখাবে। এটি কোনটিকে উপেক্ষা না করে সমস্ত Promise এর ফলাফল প্রাপ্ত করে।


Promise.race()

Promise.race() একাধিক Promise এর মধ্যে যেটি প্রথমে fulfilled অথবা rejected হবে, সেটির ফলাফল রিটার্ন করবে। যদি কোনো Promise প্রথমে rejected হয়, তবে সেটি সবচেয়ে আগে catch ব্লকে চলে যাবে। এই পদ্ধতিতে প্রথম Promise সমাধান হওয়ার পর অন্যগুলোকে আর প্রক্রিয়া করা হয় না।

Promise.race() এর ব্যবহার:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, "First Promise");
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, "Second Promise");
});
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1500, "Third Promise");
});

Promise.race([promise1, promise2, promise3])
  .then(result => {
    console.log(result); // "Second Promise"
  })
  .catch(error => {
    console.log(error);
  });

এখানে, Promise.race() দ্বিতীয় Promise কে fulfilled হিসেবে প্রথম পেয়ে তার ফলাফল রিটার্ন করবে, কারণ এটি দ্রুত শেষ হয়েছে। অন্য Promise গুলোকে উপেক্ষা করা হবে।


Promise.any()

Promise.any() একাধিক Promise এর মধ্যে প্রথম fulfilled Promise এর ফলাফল রিটার্ন করবে। তবে, এটি rejected Promise গুলোকে উপেক্ষা করে, এবং যদি সমস্ত Promise rejected হয়, তাহলে একটি AggregateError প্রদান করবে।

Promise.any() এর ব্যবহার:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(reject, 1000, "First Promise failed");
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, "Second Promise");
});
const promise3 = new Promise((resolve, reject) => {
  setTimeout(reject, 1500, "Third Promise failed");
});

Promise.any([promise1, promise2, promise3])
  .then(result => {
    console.log(result); // "Second Promise"
  })
  .catch(error => {
    console.log(error); // AggregateError: All promises were rejected
  });

এখানে, Promise.any() প্রথম fulfilled Promise এর ফলাফল রিটার্ন করেছে, আর বাকি rejected Promise গুলোকে উপেক্ষা করেছে। সব Promise rejected হলে, এটি একটি AggregateError ফেলে।


Summary

  • Promise.all(): সমস্ত Promise সফল হলে একটি ফলাফল প্রদান করে, যদি কোন একটি Promise ব্যর্থ হয়, তবে পুরো সেট ব্যর্থ হয়।
  • Promise.allSettled(): সব Promise এর ফলাফল প্রদান করে, সফল বা ব্যর্থ যাই হোক না কেন।
  • Promise.race(): প্রথমে সম্পন্ন হওয়া Promise এর ফলাফল প্রদান করে, ব্যর্থ হলে অন্যগুলোর ফলাফল উপেক্ষা করে।
  • Promise.any(): প্রথম fulfilled Promise এর ফলাফল প্রদান করে, যদি সমস্ত Promise ব্যর্থ হয়, তবে AggregateError প্রদান করে।

এই পদ্ধতিগুলোর মাধ্যমে আপনি একাধিক Promise অ্যাসিঙ্ক্রোনাস কোড খুব সহজে এবং কার্যকরভাবে হ্যান্ডল করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...