JavaScript Promise হলো এমন একটি object যা কোনো asynchronous কাজের বর্তমান অবস্থা এবং ভবিষ্যতে পাওয়া result বা error-এর প্রতিনিধিত্ব করে। সাধারণত কোনো কাজ এখনই শেষ না হলেও তার ফলাফল পরে পাওয়া যাবে—এমন পরিস্থিতিতে Promise ব্যবহার করা হয়।
Promise এমন একটি object যা asynchronous operation সফল হলে result এবং ব্যর্থ হলে error পাওয়ার একটি নির্দিষ্ট ব্যবস্থা দেয়। Promise তৈরি করার সময় সাধারণত একটি executor function ব্যবহার করা হয়।
একটি Promise-এর প্রধান তিনটি state হলো pending, fulfilled এবং rejected। কাজ শেষ না হওয়া পর্যন্ত Promise pending থাকে; সফল হলে fulfilled এবং ব্যর্থ হলে rejected হয়।
Promise-এর তিনটি প্রধান state: pending, fulfilled এবং rejected।const promise = new Promise((resolve, reject) => { resolve("কাজ সফল হয়েছে"); }); console.log(promise);
JavaScript-এ new Promise() ব্যবহার করে Promise তৈরি করা যায়। এর executor function দুটি parameter গ্রহণ করে—resolve এবং reject।
কাজ সফল হলে resolve() এবং কোনো কারণে ব্যর্থ হলে reject() call করা হয়।
new Promise((resolve, reject) => { ... })const promise = new Promise((resolve, reject) => { const success = true; if (success) { resolve("Data পাওয়া গেছে"); } else { reject("Data পাওয়া যায়নি"); } }); console.log(promise);
Promise সফলভাবে fulfilled হলে result গ্রহণ করার জন্য then() method ব্যবহার করা হয়। এটি Promise থেকে পাওয়া value নিয়ে পরবর্তী কাজ করতে সাহায্য করে।
then() সাধারণত একটি callback function গ্রহণ করে, যেখানে resolved value পাওয়া যায়।
promise.then(function(result) { ... });const promise = Promise.resolve("Hello JavaScript"); promise.then(function(result) { console.log(result); });
Promise rejected হলে error handling করার জন্য catch() method ব্যবহার করা হয়। কোনো asynchronous operation ব্যর্থ হলে reject করা value catch() callback-এ পাওয়া যায়।
তাই Promise ব্যবহার করার সময় সফল result-এর জন্য then() এবং error-এর জন্য catch() একসঙ্গে ব্যবহার করা একটি প্রচলিত পদ্ধতি।
promise.catch(function(error) { ... });const promise = Promise.reject("একটি Error হয়েছে"); promise.catch(function(error) { console.log(error); });
Promise fulfilled হোক বা rejected হোক, উভয় ক্ষেত্রেই কোনো নির্দিষ্ট কাজ চালানোর জন্য finally() method ব্যবহার করা যায়।
যেমন loading বন্ধ করা বা কোনো সাধারণ cleanup কাজ করার জন্য finally() ব্যবহার করা যেতে পারে।
then() বা catch() এর পরে finally() ব্যবহার করা যায়।Promise.resolve("কাজ শেষ") .then(function(result) { console.log(result); }) .finally(function() { console.log("শেষের কাজ সম্পন্ন"); });
একটি Promise-এর then() থেকে পাওয়া result পরবর্তী then()-এ পাঠিয়ে ধারাবাহিকভাবে একাধিক asynchronous বা data processing কাজ করা যায়। এই পদ্ধতিকে Promise chaining বলা হয়।
প্রতিটি then() থেকে নতুন value return করলে সেটি পরের then() callback-এর parameter হিসেবে পাওয়া যায়।
একাধিক then() ধারাবাহিকভাবে ব্যবহার করে Promise chain তৈরি করা যায়।Promise.resolve(10) .then(function(value) { return value + 5; }) .then(function(value) { return value * 2; }) .then(function(result) { console.log(result); });
setTimeout() ব্যবহার করে নির্দিষ্ট সময় পরে কোনো কাজ করা যায়। এটিকে Promise-এর সঙ্গে ব্যবহার করলে delayed asynchronous operation-এর একটি সহজ উদাহরণ তৈরি করা যায়।
এখানে Promise কিছু সময় pending থাকার পরে resolve করতে পারে।
setTimeout() asynchronous কাজের simulation তৈরি করতে ব্যবহার করা যায়।const promise = new Promise(function(resolve) { setTimeout(function() { resolve("২ সেকেন্ড পরে কাজ সম্পন্ন"); }, 2000); }); promise.then(function(result) { console.log(result); });
Promise.all() একাধিক Promise একসঙ্গে চালিয়ে সবগুলো fulfilled হলে তাদের result একটি array হিসেবে দেয়। কোনো একটি Promise rejected হলে পুরো Promise.all() rejected হয়।
একাধিক independent asynchronous কাজের সব result একসঙ্গে প্রয়োজন হলে Promise.all() ব্যবহার করা যেতে পারে।
Promise.all([promise1, promise2, promise3])const p1 = Promise.resolve("প্রথম কাজ"); const p2 = Promise.resolve("দ্বিতীয় কাজ"); const p3 = Promise.resolve("তৃতীয় কাজ"); Promise.all([p1, p2, p3]).then(function(results) { console.log(results); });
Promise.race() একাধিক Promise-এর মধ্যে যেটি আগে settled হয়, তার result বা error গ্রহণ করে। অর্থাৎ প্রথম fulfilled বা rejected Promise-এর ফলাফল পাওয়া যায়।
একাধিক asynchronous operation-এর মধ্যে কোনটি আগে শেষ হচ্ছে তা পর্যবেক্ষণ করার ক্ষেত্রে এটি ব্যবহার করা যায়।
Promise.race([promise1, promise2])const p1 = new Promise(function(resolve) { setTimeout(function() { resolve("প্রথম Promise"); }, 1000); }); const p2 = new Promise(function(resolve) { setTimeout(function() { resolve("দ্বিতীয় Promise"); }, 2000); }); Promise.race([p1, p2]).then(function(result) { console.log(result); });
Promise-এর asynchronous result আরও সহজভাবে লেখার জন্য async এবং await ব্যবহার করা যায়। async function সাধারণত একটি Promise return করে এবং await কোনো Promise-এর result পাওয়ার জন্য অপেক্ষা করে।
তবে await ব্যবহার করার জন্য সেটি সাধারণত async function-এর ভিতরে ব্যবহার করা হয়। Error handling-এর জন্য try-catch ব্যবহার করা যায়।
async function + await = Promise-based asynchronous code সহজভাবে লেখা।function getData() { return Promise.resolve("Data পাওয়া গেছে"); } async function showData() { const result = await getData(); console.log(result); } showData();