জাভাস্ক্রিপ্টে ইতিমধ্যে সম্পন্ন হওয়া প্রমিস তৈরি করা
কখনও কখনও আপনার ইতিমধ্যে সম্পন্ন হওয়া
প্রমিস তৈরি করার প্রয়োজন হতে পারে। এর জন্য
দুটি পদ্ধতি রয়েছে: Promise.resolve পদ্ধতি
সফলভাবে সম্পন্ন প্রমিস তৈরি করে, Promise.reject
ব্যর্থ প্রমিস তৈরি করে। এই পদ্ধতিগুলি প্যারামিটার হিসাবে
সেই জিনিসটি পায়, যা যথাক্রমে প্রমিসের ফলাফল
বা ত্রুটি হয়ে উঠবে।
কখন আমাদের ইতিমধ্যে সম্পন্ন হওয়া প্রমিসের প্রয়োজন হতে পারে? আসুন একটি উদাহরণ দিয়ে দেখি। ধরুন আমাদের কাছে একটি ফাংশন আছে যা প্যারামিটার হিসাবে একটি সংখ্যা নেয়, এটি দিয়ে অ্যাসিঙ্ক্রোনাসভাবে কিছু করে এবং ফলাফল সহ একটি প্রমিস রিটার্ন করে:
function func(num) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
}
আমরা নিম্নলিখিত উপায়ে আমাদের ফাংশনটি ব্যবহার করব:
func(5).then(function(res) {
console.log(res); // আউটপুট হবে 25
});
ধরুন এখন আমরা সিদ্ধান্ত নিলাম যে আমরা আমাদের অ্যাসিঙ্ক্রোনাস অপারেশনটি শুধুমাত্র তখনই সম্পাদন করব যদি শূন্যের চেয়ে বড় সংখ্যা দেওয়া হয়। অন্যথায় ফাংশনের ফলাফল শূন্য হওয়া উচিত:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return 0; // শূন্য ফলাফল
}
}
যাইহোক, এখন দেখা যাচ্ছে যে ফাংশনটি রিটার্ন করে
হয় একটি প্রমিস বা একটি সংখ্যা। এর কারণে আমরা
ফলস্বরূপ ফাংশনে then পদ্ধতি প্রয়োগ করতে পারি না,
কারণ ফাংশনটি যদি একটি সংখ্যা রিটার্ন করে
তবে আমরা একটি ত্রুটি পাব:
func(0).then(function(res) { // ত্রুটি, আমরা শূন্যে then মেথড প্রয়োগ করছি
});
Promise.resolve আমাদের সমস্যা সমাধান করতে সাহায্য করবে:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return Promise.resolve(0); // আমরা একটি সংখ্যা নয়, একটি প্রমিস রিটার্ন করছি
}
}
ধরুন এখন আমরা সিদ্ধান্ত নিলাম যে প্রেরিত
শূন্যের জন্য আমাদের শূন্য রিটার্ন করতে হবে, এবং শূন্যের চেয়ে কম সংখ্যার জন্য
- একটি এক্সসেপশন। এতে আমাদের সাহায্য করবে
Promise.reject পদ্ধতি:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else if (num === 0) {
return Promise.resolve(0);
} else {
return Promise.reject('incorrect number'); // আমরা একটি ব্যর্থ প্রমিস রিটার্ন করব
}
}