Promise হলো JavaScript এর একটি অস্বাভাবিক (Asynchronous) অপারেশন ব্যবস্থাপনা পদ্ধতি, যা একমাত্র একটি ফলাফল প্রাপ্ত করার জন্য বিভিন্ন স্টেট ব্যবহৃত করে। Promise মূলত তিনটি স্টেট নিয়ে কাজ করে:
- Pending (অপেক্ষমাণ)
- Fulfilled (পূর্ণ)
- Rejected (ব্যর্থ)
এই তিনটি স্টেট Promise এর জীবনের বিভিন্ন মুহূর্তকে চিহ্নিত করে এবং প্রতিটি স্টেটের মধ্যে Promise এর মানের পরিবর্তন ঘটে।
1. Pending (অপেক্ষমাণ)
প্রথমে যখন একটি Promise তৈরি করা হয়, তখন তার স্টেট থাকে pending বা অপেক্ষমাণ। এর মানে হল, Promise এর কার্যকলাপ এখনও শেষ হয়নি এবং তার ফলাফল (যে কাজটি হবে) এখনও পাওয়া যায়নি। অর্থাৎ, Promise এখনো কার্যকর (resolve) বা ব্যর্থ (reject) হয়নি।
let promise = new Promise((resolve, reject) => {
// Promise is still pending
});
console.log(promise); // Pending state
Pending স্টেটের সময়, Promise কেবল অপেক্ষা করছে তার অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হওয়ার জন্য।
2. Fulfilled (পূর্ণ)
যখন Promise সফলভাবে তার অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন করে এবং ফলাফল প্রদান করে, তখন তার স্টেট fulfilled হয়ে যায়। এর মানে হল যে, Promise সফলভাবে কাজ শেষ করেছে এবং যে মানটি প্রদান করা হবে সেটি resolve() মাধ্যমে পাওয়া যাবে।
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Operation successful!"), 1000);
});
promise.then((value) => {
console.log(value); // "Operation successful!"
});
এখানে, resolve() কল করার মাধ্যমে Promise এর স্টেট fulfilled হয়ে গিয়েছে এবং এটি সফলভাবে ফলাফল প্রদান করেছে।
3. Rejected (ব্যর্থ)
যখন Promise তার অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন করার পর কোনো ধরনের ত্রুটি বা ব্যর্থতা ঘটে, তখন তার স্টেট rejected হয়ে যায়। এর মানে হল যে, Promise এর কার্যকলাপ ব্যর্থ হয়েছে এবং এটি reject() কলের মাধ্যমে ত্রুটি বা ব্যর্থতার কারণ জানিয়ে দেয়।
let promise = new Promise((resolve, reject) => {
setTimeout(() => reject("Operation failed!"), 1000);
});
promise.catch((error) => {
console.log(error); // "Operation failed!"
});
এখানে, reject() কল করার মাধ্যমে Promise এর স্টেট rejected হয়ে গেছে এবং এটি ব্যর্থতার কারণ প্রদান করেছে।
Promise চেইনিং
যেহেতু Promise একটি Asynchronous অপারেশনকে ম্যানেজ করে, তাই আপনি then(), catch() এবং finally() ব্যবহার করে Promise এর ফলাফল এবং তার স্টেট অনুযায়ী নির্ধারিত কাজ করতে পারেন।
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Task completed successfully!");
} else {
reject("Task failed.");
}
});
promise
.then((result) => {
console.log(result); // "Task completed successfully!"
})
.catch((error) => {
console.log(error); // "Task failed."
});
এখানে, then() Promise এর fulfilled স্টেটের জন্য ব্যবহৃত হয়, এবং catch() rejected স্টেটের জন্য ব্যবহৃত হয়।
Promise এর সাথে একাধিক স্টেট
একাধিক Promise একসাথে হ্যান্ডেল করতে Promise.all(), Promise.race() ইত্যাদি ব্যবহার করা যায়। এভাবে, একাধিক Promise এর স্টেটের ভিত্তিতে কাজ করা সম্ভব হয়, যেমন:
Promise.all():
যদি একাধিক Promise সব fulfilled হয়, তবে তারা একসাথে ফলাফল রিটার্ন করবে। যদি কোনো একটি Promise rejected হয়, তবে পুরো Promise.all() চেইনটি rejected হয়ে যাবে।
let promise1 = new Promise((resolve) => resolve("First Promise"));
let promise2 = new Promise((resolve, reject) => reject("Second Promise failed"));
Promise.all([promise1, promise2])
.then((values) => {
console.log(values);
})
.catch((error) => {
console.log(error); // "Second Promise failed"
});
এখানে, promise2 এর rejected স্টেট পুরো Promise.all() চেইনটিকে rejected করে দেয়।
সারাংশ
- Pending: Promise তৈরি হওয়ার পর, কিন্তু কাজ সম্পন্ন হয়নি।
- Fulfilled: Promise সফলভাবে কাজ শেষ করেছে এবং ফলাফল প্রদান করেছে।
- Rejected: Promise কোনো কারণে ব্যর্থ হয়েছে এবং ত্রুটি বা সমস্যা জানিয়েছে।
Promise স্টেটের মাধ্যমে অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করা সহজ হয় এবং পারফরম্যান্স উন্নত হয়। then(), catch(), এবং finally() ব্যবহার করে Promise এর ফলাফল এবং স্টেট হ্যান্ডেল করা যায়।
Read more