ধরা যাক, আমাদের কাছে দুটি উপাদানের একটি অ্যারে রয়েছে, যাদের উভয়ই অ্যাসিঙ্ক্রোনাস ফাংশন। উভয় অ্যাসিঙ্ক্রোনাস ফাংশনের এক্সিকিউশন সম্পূর্ণ হলে আমাদের কিছু কাজ করতে হবে, যেমন কনসোলে কিছু প্রিন্ট করা। এই চ্যালেঞ্জটি কীভাবে সমাধান করব?
অ্যাসিঙ্ক্রোনাস কাজ সম্পূর্ণ হওয়ার পর কোনো টাস্ক সম্পাদনের মূলত দুটি পদ্ধতি রয়েছে:
- প্রমিস (Promises) ব্যবহার করে
- অ্যাসিনক/অওয়েট (async/await) ফাংশন ব্যবহার করে
কিন্তু যখন কোডে একাধিক (একটির বেশি) অ্যাসিঙ্ক্রোনাস ফাংশন পরিচালনা করার কথা হয়, তখন প্রথম পদ্ধতির Promise.all ফাংশন দ্বিতীয় পদ্ধতির চেয়ে বেশি সুবিধাজনক।
উদাহরণ
নিচের কোডটি দেখুন:
const arr = [
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('func1 fired!');
}, 2000);
}),
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('func2 fired');
}, 3000);
})
];
const lastFunction = () => {
console.log('this function should be fired at the very last');
};
Promise.all([arr[0], arr[1]]).then((resp) => {
console.log(resp);
lastFunction();
}).catch((err) => {
console.log('something unexpected happened');
})
আউটপুট
এটি কনসোলে নিচের আউটপুট তৈরি করবে:
[ 'func1 fired!', 'func2 fired' ] this function should be fired at the very last