প্রমিস হচ্ছে কোন task সঠিক ভাবে সম্পাদন হলে তার object ভ্যালু, অথবা কেন কাজটি সম্পাদন করতে পারেনি তার ভ্যালু এর একটি Object। প্রমিস কী তা বোঝার জন্য নিচের উদাহরন টির মাধ্যমে বুঝার চেষ্টা করব।
আমি: প্রমিস শুনো, আমার জন্য নিচের দোকান থেকে কিছু ডিম্ এনে দিবে ??
প্রমিস: অবশ্যই দিব।
আমিঃ তাহলে তুমি ডিম নিয়ে আসতে আসতে আমি অন্য কিছু কাজ করতে থাকি।
প্রমিসঃ ঠিক আছে।
আমিঃ অবশ্যই যদি ডিম পাওয়া যায় তাহলে আমাকে এনে দিবে (Resolve) আর যদি না
পাও তাহলেও আমাকে টেক্সট (reject) করে জানাবে যে তুমি ডিম পাও নাই।
প্রমিসের ৩ ধরনের states হতে পারেঃ
- Fulfilled: onFulfilled() কল হবে। (resolve())
- Rejected: onRejected() কল হবে (reject())
- Pending: এখন পর্যন্ত resolve() অথবা rejected(), state এ পরিনত হয় নাই।
নিচে একটি প্রমিসের syntax দেওয়া হলঃ
let promise = new Promise(function(resolve, reject) {
// executor (the producing code)
});
এখানে new Promise() এর মধ্যে যে ফাংশনটি পাস করা হয় তাকে executor বলা হয়।
যখন new Promise() তৈরি করা হয় তখনই executor অটোমেটিকেলি কল হয়।
মনে রাখতে হবে যে Promise সব সময় যে কোন একটি Object (resolve()/reject()) রির্টান করবে।
নিচের কোডটিতে promise() এর মধ্যে কিভাবে setTimeout() ব্যবহার করব তা দেখানো হয়েছে।
let promise = new Promise(function(resolve, reject) {
// the function is executed automatically when the promise is constructed
// after 1 second signal that the job is done with the result "done"
setTimeout(() => resolve("done"), 1000);
});
New Promise() কল হবার সাথে সাথে আমরা resolve() অথবা reject() কল করতে পারি। নিচের কোডটিতে সেইটাই দেখানো হছে।
let promise = new Promise(function(resolve, reject) {
// not taking our time to do the job
resolve(123); // immediately give the result: 123
});
Promise Consumers : then, catch, finally.
নিচের কোডটিতে Promise এর একটি মূল মেথড then() দেখানো হয়েছেঃ
// Syntax of promise then()......
promise.then(
function(result) { /* handle a successful result */ },
function(error) { /* handle an error */ }
);
// promise with then() method.
let promise = new Promise((resolve, reject)=>{
resolve('Success')
});
promise.then(
(result) => { console.log('Status is: '+result)},
(error) => {console.log('Status is: '+error)}
);