ES6 (ECMAScript 2015) এ Promises এর মাধ্যমে অ্যাসিঙ্ক্রোনাস কোড লেখার একটি উন্নত পদ্ধতি সরবরাহ করা হয়। এর মাধ্যমে, আমরা অ্যাসিঙ্ক্রোনাস অপারেশনকে আরও সহজ এবং কোড পাঠযোগ্য করতে পারি। পরবর্তীতে, Async/Await এস6 এর সাথে আরও একটি শক্তিশালী বৈশিষ্ট্য হিসেবে যোগ করা হয়, যা Promises এর সাথে কাজ করে এবং অ্যাসিঙ্ক্রোনাস কোডের স্ট্রাকচার আরও পরিষ্কার ও সহজ করে তোলে।
Promises কী?
Promises অ্যাসিঙ্ক্রোনাস অপারেশন বা ফাংশনগুলির ফলাফলকে প্রতিনিধিত্ব করে। একটি Promise হলো একটি ওয়েব API বা কোনো ফাংশনের অ্যাসিঙ্ক্রোনাস কাজের জন্য যে অবস্থা থাকে তা ম্যানেজ করে।
Promise এর তিনটি অবস্থা থাকতে পারে:
- Pending (অপেক্ষমাণ): Promise এখনও সম্পন্ন হয়নি।
- Resolved (পূর্ণাঙ্গ): Promise সফলভাবে সম্পন্ন হয়েছে।
- Rejected (অগ্রাহ্য): Promise সফলভাবে সম্পন্ন হয়নি এবং ত্রুটি ঘটেছে।
Promise এর উদাহরণ
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Operation successful!");
} else {
reject("Operation failed!");
}
});
promise
.then(result => console.log(result)) // "Operation successful!"
.catch(error => console.log(error)); // "Operation failed!"
এখানে, resolve() ফাংশনটি Promise সফলভাবে সম্পন্ন হলে কল করা হয়, এবং reject() ফাংশনটি ত্রুটি হলে কল হয়। then() এবং catch() মেথড ব্যবহার করে আমরা Promise এর ফলাফল এবং ত্রুটিগুলি হ্যান্ডল করি।
Async/Await কী?
Async/Await হলো ES6 এর একটি ফিচার, যা Promises এর সাথে কাজ করে এবং অ্যাসিঙ্ক্রোনাস কোডকে সিঙ্ক্রোনাস কোডের মত দেখতে এবং ব্যবহার করতে সক্ষম করে। এটি কোডের স্ট্রাকচার সহজ এবং পাঠযোগ্য করে তোলে।
- Async: একটি ফাংশন যখন
asyncদিয়ে ডিফাইন করা হয়, তখন সেটি একটি Promise রিটার্ন করে। - Await:
awaitকিওয়ার্ডটি শুধুমাত্রasyncফাংশনের ভিতরে ব্যবহার করা যায় এবং এটি Promise সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করে।awaitPromise কে থামায় এবং ফলস্বরূপ, অ্যাসিঙ্ক্রোনাস অপারেশনকে সিঙ্ক্রোনাস অপারেশনের মত কাজ করায়।
Async/Await এর উদাহরণ
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Data fetched!");
}, 2000);
});
}
async function getData() {
let result = await fetchData();
console.log(result);
}
getData(); // "Data fetched!" (after 2 seconds)
এখানে, fetchData() ফাংশনটি একটি Promise রিটার্ন করে, যা 2 সেকেন্ড পর "Data fetched!" রিটার্ন করবে। getData() ফাংশনটি async দ্বারা ডিফাইন করা হয়েছে, এবং তার ভিতরে await কিওয়ার্ড ব্যবহার করে আমরা fetchData() এর ফলাফল পাওয়া পর্যন্ত অপেক্ষা করি।
Async/Await এবং Promises এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Promises | Async/Await |
|---|---|---|
| পদ্ধতি | .then() এবং .catch() ব্যবহার করা হয় | await দিয়ে Promise অপেক্ষা এবং async ফাংশন ব্যবহার |
| কোডের পাঠযোগ্যতা | কোড একটু বেশি জটিল হতে পারে | কোড আরও পরিষ্কার এবং সিঙ্ক্রোনাস মনে হয় |
| বিভিন্ন অপারেশন একসাথে করা | চেইনিং প্রয়োজন | একাধিক await ব্যবহার করে সহজে একাধিক অপারেশন করা যায় |
Multiple Promises with Async/Await
একাধিক Promise এর জন্য await ব্যবহার করা যেতে পারে, এবং এটি Promise.all() এর মতো সমানভাবে কাজ করবে, কিন্তু কোডটি আরও সহজ এবং পরিষ্কার হয়ে যাবে।
উদাহরণ:
function fetchData1() {
return new Promise((resolve) => setTimeout(() => resolve("Data 1"), 2000));
}
function fetchData2() {
return new Promise((resolve) => setTimeout(() => resolve("Data 2"), 3000));
}
async function getAllData() {
let data1 = await fetchData1();
let data2 = await fetchData2();
console.log(data1); // "Data 1"
console.log(data2); // "Data 2"
}
getAllData();
এখানে, await দিয়ে দুটি অ্যাসিঙ্ক্রোনাস অপারেশন ধারাবাহিকভাবে কার্যকর হবে। যদি আপনি চান যে অপারেশনগুলো একসাথে চলুক, তবে Promise.all() ব্যবহার করতে পারেন।
async function getAllData() {
let [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
console.log(data1); // "Data 1"
console.log(data2); // "Data 2"
}
এখানে, Promise.all() এর মাধ্যমে দুটি Promise একসাথে চালানো হয়েছে, এবং await কিওয়ার্ডের মাধ্যমে আমরা উভয় ফলাফলই একসাথে পেয়েছি।
সারাংশ
- Promises অ্যাসিঙ্ক্রোনাস অপারেশন ম্যানেজ করতে ব্যবহৃত হয়, যেখানে সফল বা ব্যর্থ হওয়ার অবস্থার জন্য
resolveবাrejectব্যবহার করা হয়। - Async/Await এস6 এর একটি ফিচার, যা Promises এর সাথে ব্যবহৃত হয় এবং কোডকে সিঙ্ক্রোনাস ভাবে লেখার সুযোগ দেয়, ফলে কোড সহজ ও পরিষ্কার হয়।
- Async ফাংশন Promise রিটার্ন করে এবং Await Promise এর ফলাফল আসা পর্যন্ত অপেক্ষা করে।
Async/Await ব্যবহারের মাধ্যমে আপনি অ্যাসিঙ্ক্রোনাস কোডের পরিচালনা সহজভাবে করতে পারবেন, যা কোডের পাঠযোগ্যতাও বাড়ায়।