জাভাস্ক্রিপ্টে সিঙ্ক্রোনাস স্টাইলে প্রমিস
প্রমিস হেলের সমস্যা সমাধানের জন্য একটি বিশেষ প্রমিস সিনট্যাক্স উদ্ভাবন করা হয়েছিল, যা অ্যাসিঙ্ক্রোনাস কোড লেখাকে অনেক সহজ করে দেয় - সিঙ্ক্রোনাস স্টাইলে।
আসুন এটি শেখা শুরু করি। শুরু করতে আগের পাঠের কোডটি নেওয়া যাক:
function func() {
getSmth(2).then(res => {
console.log(res); // 4 দেখাবে
});
}
func();
যদি আমাদের ফাংশন getSmth
সিঙ্ক্রোনাস হত, তাহলে func ফাংশনের কোড
আমরা নিম্নলিখিতভাবে পুনরায় লিখতে পারতাম:
function func() {
let res = getSmth(2);
console.log(res); // 4 দেখাবে
}
getSmth ফাংশনটি, যাইহোক, অ্যাসিঙ্ক্রোনাস,
তাই উপরে প্রদত্ত কোডটি কাজ করবে না।
কিন্তু, সিঙ্ক্রোনাস স্টাইল প্রমিস ব্যবহার করে,
আমরা অনুরূপ কিছু পেতে সক্ষম হব। এটি করা যাক।
শুরুতে আমাদের অবশ্যই আমাদের ফাংশন
func কে বিশেষ কমান্ড async ব্যবহার করে
অ্যাসিঙ্ক্রোনাস হিসাবে ঘোষণা করতে হবে:
async function func() {
}
এর পরে আমরা func ফাংশনের ভিতরে
বিশেষ কমান্ড await ব্যবহার করতে সক্ষম হব।
এই কমান্ডটি, একটি প্রমিসের আগে লেখা, জাভাস্ক্রিপ্টকে
ততক্ষণ পর্যন্ত অপেক্ষা করতে বাধ্য করবে যতক্ষণ না প্রমিস
সম্পন্ন হয়। তারপর কমান্ডটি প্রমিসের ফলাফল ফেরত দেবে,
এবং কোডের এক্সিকিউশন চলতে থাকবে।
আমাদের ক্ষেত্রে, আমাদের await
লিখতে হবে getSmth কল করার আগে। যেহেতু এই ফাংশনটি কল করার ফলাফল
একটি প্রমিস হবে, তাই কোডের পরবর্তী এক্সিকিউশন
শুধুমাত্র এই প্রমিসটি সম্পন্ন হওয়ার পরেই চলতে থাকবে।
আর, প্রমিসের ফলাফল একটি ভেরিয়েবলে লেখা যেতে পারে। বর্ণিতটি
করি:
async function func() {
let res = await getSmth(2);
console.log(res); // 4 দেখাবে
}
func();
আসুন getSmth কে বেশ কয়েকবার কল করি:
async function func() {
let res1 = await getSmth(2);
let res2 = await getSmth(3);
console.log(res1 + res2); // 13 দেখাবে
}
func();
এবং এখন লুপে getSmth কল করি:
async function func() {
let arr = [1, 2, 3, 4, 5];
let sum = 0;
for (let elem of arr) {
sum += await getSmth(elem);
}
console.log(sum);
}
func();
নিম্নলিখিত কোডটি সিঙ্ক্রোনাস সিনট্যাক্সের মাধ্যমে পুনরায় লিখুন:
function func() {
getSmth(2).then(res1 => {
getSmth(3).then(res2 => {
getSmth(4).then(res3 => {
console.log(res1 + res2 + res3);
});
});
});
}
func();