Promise.all(), Promise.race(), এবং Promise.allSettled() ES6 (ECMAScript 2015)-এ নতুন Promise মেথড হিসেবে অন্তর্ভুক্ত হয়েছে, যা অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনা করতে সাহায্য করে। এই মেথডগুলোর মাধ্যমে একাধিক Promise একসাথে বা দ্রুততম সফল/অসফল Promise-এর ভিত্তিতে কাজ করা যায়। তারা Promise-based অ্যাসিঙ্ক্রোনাস কোডের সম্পাদনাকে আরও নিয়ন্ত্রণযোগ্য এবং ম্যানেজেবল করে তোলে।
1. Promise.all()
Promise.all() মেথডটি একাধিক Promise একসাথে চালায় এবং তাদের সকল Promise সফল হলে একটি একক Promise ফেরত দেয়, যেখানে সেই Promise এর মান হবে সমস্ত Promise এর মানের অ্যারে। যদি কোন একটি Promise ব্যর্থ হয় (rejected), তবে Promise.all() তৎক্ষণাৎ ব্যর্থ হয় এবং অন্য যেকোনো Promise গুলি তার ফলাফলকে উপেক্ষা করে।
Sintax:
Promise.all([promise1, promise2, promise3])
.then(values => {
// All promises are fulfilled
})
.catch(error => {
// One of the promises is rejected
});
Promise.all() উদাহরণ
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'foo'));
const promise3 = 42;
Promise.all([promise1, promise2, promise3])
.then(values => {
console.log(values); // [3, "foo", 42]
})
.catch(error => {
console.error(error);
});
এখানে, Promise.all() সব Promise গুলির সফল ফলাফল নিয়ে আসবে এবং একটি অ্যারে রিটার্ন করবে যা সব Promise গুলির মান ধারণ করবে। যদি কোন একটি Promise ব্যর্থ হয়, তবে catch() ব্লক কল হবে।
2. Promise.race()
Promise.race() মেথডটি একাধিক Promise এর মধ্যে প্রথমে যেটি সম্পন্ন (fulfilled) বা ব্যর্থ (rejected) হয় সেটি ফিরিয়ে দেয়। এটি যেকোনো এক Promise-এর ফলাফলকে দ্রুত পাওয়ার জন্য ব্যবহার করা হয়। যদি প্রথম Promise সফল হয়, তাহলে সেটি সম্পন্ন হবে, আর যদি প্রথম Promise ব্যর্থ হয়, তবে সেটি ব্যর্থ হবে।
Sintax:
Promise.race([promise1, promise2, promise3])
.then(value => {
// First fulfilled promise
})
.catch(error => {
// First rejected promise
});
Promise.race() উদাহরণ
const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'First'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'Second'));
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 200, 'Third'));
Promise.race([promise1, promise2, promise3])
.then(value => {
console.log(value); // "Second"
})
.catch(error => {
console.error(error);
});
এখানে, Promise.race() প্রথমে যে Promise সফল হবে, সেটির মান রিটার্ন করবে। promise2 দ্রুততম Promise ছিল, তাই এটি আগে সম্পন্ন হয়ে তার মান "Second" প্রদান করে।
3. Promise.allSettled()
Promise.allSettled() মেথডটি সমস্ত Promise এর ফলাফল জানিয়ে দেয়, তবে সেটা সফল (fulfilled) হোক বা ব্যর্থ (rejected)। এটি একটি অ্যারে রিটার্ন করে, যেখানে প্রত্যেকটি Promise এর অবস্থা এবং তার মান বা ত্রুটি দেওয়া থাকে। এটি খুব উপকারী যখন আপনি চান যে সব Promise গুলি শেষ হোক, এবং প্রত্যেকটির ফলাফল বা ত্রুটি দেখতে চান।
Sintax:
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
// Array of results (fulfilled or rejected)
});
Promise.allSettled() উদাহরণ
const promise1 = Promise.resolve(42);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'Error'));
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 200, 'Success'));
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
console.log(results);
// [
// { status: "fulfilled", value: 42 },
// { status: "rejected", reason: "Error" },
// { status: "fulfilled", value: "Success" }
// ]
});
এখানে, Promise.allSettled() সমস্ত Promise এর ফলাফল দেখাবে, তারা সফল হলে value এবং ব্যর্থ হলে reason প্রদান করবে। এটি খুবই কার্যকর যখন আপনি চান যে সব Promise গুলি শেষ হোক, এবং ফলাফল বা ত্রুটি দেখতে চান।
সারাংশ
Promise.all(): সমস্ত Promise সফল হলে একক Promise ফেরত দেয়। যদি কোন একটি Promise ব্যর্থ হয়, তখন তা পুরোপুরি ব্যর্থ হবে।Promise.race(): যে Promise প্রথমে সম্পন্ন হবে (সফল বা ব্যর্থ), সেটি ফিরিয়ে দেয়।Promise.allSettled(): সমস্ত Promise এর ফলাফল জানায়, তা সফল বা ব্যর্থ হওয়া সত্ত্বেও।
এই মেথডগুলোকে Promise-based asynchronous কোড এর মধ্যে নিয়ন্ত্রণ এবং কর্মক্ষমতা বৃদ্ধি করতে ব্যবহার করা হয়।
Read more