জাভাস্ক্রিপ্ট একটি একক থ্রেডেড ভাষা, যা সাধারণত সিঙ্ক্রোনাসভাবে কাজ করে, অর্থাৎ একে একে সব অপারেশন সম্পন্ন হয়। তবে, কিছু অপারেশন যেমন নেটওয়ার্ক রিকুয়েস্ট, ফাইল সিস্টেম এক্সেস, অথবা টাইমার অপারেশন সিঙ্ক্রোনাসভাবে সম্পন্ন হতে সময় নিতে পারে। এই সময়ের মধ্যে, ইউজার ইন্টারফেস বা অন্যান্য প্রক্রিয়া সঠিকভাবে কাজ না করার জন্য অ্যাসিঙ্ক্রোনাস কোড ব্যবহৃত হয়। অ্যাসিঙ্ক্রোনাস কোড ইউজার ইন্টারফেসকে স্থির না রেখে অন্য কাজ করতে সক্ষম।
অ্যাসিনক্রোনাস প্রোগ্রামিং এমন একটি প্রোগ্রামিং কৌশল যেখানে কোডের কিছু অংশ নির্দিষ্ট সময় নিতে পারে, তবে অন্যান্য কাজ চলতে থাকে। জাভাস্ক্রিপ্টের অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং ব্যবহার করা হয় যখন কিছু কার্য সম্পাদন করতে সময় লাগে এবং আমরা চাইনা যে সেগুলি সব একে একে প্রক্রিয়া হোক।
অ্যাসিনক্রোনাস কোড লেখার জন্য বিভিন্ন পদ্ধতি ব্যবহার করা হয়, যেমন কলব্যাক (callback), প্রমিস (promise), এবং অ্যাসিঙ্ক/অওয়েইট (async/await)।
ধরা যাক, আপনি একটি ডেটাবেস থেকে ডেটা ফেচ করতে চান, কিন্তু ডেটা ফেচ হওয়ার সময় অন্য কোনো কোড থামবে না। অ্যাসিনক্রোনাস কোডের মাধ্যমে আপনি এই কাজটি করতে পারেন।
setTimeout()
- অ্যাসিনক্রোনাস টাইমারconsole.log("শুরু");
setTimeout(() => {
console.log("টাইমআউট পরবর্তী কাজ");
}, 2000); // ২ সেকেন্ড পর 실행 হবে
console.log("শেষ");
এই কোডে, setTimeout()
একটি টাইমআউট ফাংশন যেটি ২ সেকেন্ড পর 실행 হবে, কিন্তু এটির জন্য অন্য কোনো কোড থামবে না। আউটপুট হবে:
শুরু
শেষ
টাইমআউট পরবর্তী কাজ
এখানে দেখা যাচ্ছে যে, টাইমআউটের পরবর্তী কাজ ২ সেকেন্ড পর সম্পন্ন হলেও অন্য কাজগুলি চলতে থাকে।
একটি ফাংশনকে অন্য ফাংশনের আর্গুমেন্ট হিসেবে পাস করা কলব্যাক হিসেবে পরিচিত। এটি অ্যাসিঙ্ক্রোনাস কাজ সম্পন্ন হলে কল করা হয়। তবে, কলব্যাক হেল (Callback Hell) নামক একটি সমস্যা হতে পারে, যেখানে কলব্যাকগুলি নেস্টেড থাকে, যা কোডের পাঠযোগ্যতা কমিয়ে দেয়।
function fetchData(callback) {
setTimeout(() => {
const data = "ডেটা ফেচ হয়েছে";
callback(data);
}, 2000);
}
fetchData(function(data) {
console.log(data); // আউটপুট: ডেটা ফেচ হয়েছে
});
প্রমিস হল একটি বিশেষ অবজেক্ট, যা ভবিষ্যতে কোনো সফল অপারেশন বা ত্রুটির জন্য অপেক্ষা করে। এটি কলব্যাকের বিকল্প এবং কোডের পাঠযোগ্যতা উন্নত করতে সাহায্য করে। একটি প্রমিসে তিনটি স্টেট থাকে: Pending (অপেক্ষমাণ), Resolved (সম্পন্ন), এবং Rejected (অব্যাহত)।
let dataFetched = new Promise(function(resolve, reject) {
setTimeout(() => {
let success = true;
if(success) {
resolve("ডেটা সফলভাবে ফেচ হয়েছে");
} else {
reject("ডেটা ফেচ করতে সমস্যা হয়েছে");
}
}, 2000);
});
dataFetched
.then(function(result) {
console.log(result); // আউটপুট: ডেটা সফলভাবে ফেচ হয়েছে
})
.catch(function(error) {
console.log(error); // আউটপুট: ডেটা ফেচ করতে সমস্যা হয়েছে
});
এই কোডে, প্রমিস প্রথমে Pending
অবস্থায় থাকে এবং ২ সেকেন্ড পর এটি Resolved
বা Rejected
হতে পারে, যা তারপর .then()
বা .catch()
দিয়ে হ্যান্ডেল করা হয়।
async
এবং await
কিওয়ার্ডগুলি ES7 (ECMAScript 2017) এ চালু হয়েছিল এবং এটি প্রমিস ব্যবহার করার একটি আরও সহজ এবং সিম্পল পদ্ধতি প্রদান করে। async
ফাংশনটি একটি প্রমিস রিটার্ন করে এবং await
কিওয়ার্ডটি প্রমিসের ফলাফল পাওয়া না যাওয়া পর্যন্ত কোডটির পরবর্তী অংশ ব্লক করে।
function fetchData() {
return new Promise(resolve => {
setTimeout(() => {
resolve("ডেটা ফেচ হয়েছে");
}, 2000);
});
}
async function getData() {
let result = await fetchData();
console.log(result); // আউটপুট: ডেটা ফেচ হয়েছে
}
getData();
এখানে, fetchData()
ফাংশনটি একটি প্রমিস রিটার্ন করে এবং await
দ্বারা আমরা সেই প্রমিসের ফলাফল পর্যন্ত অপেক্ষা করি। getData()
একটি async
ফাংশন যা প্রমিস রিটার্ন করবে এবং await
এর মাধ্যমে ডেটা পাওয়ার পর পরবর্তী কোডটি এক্সিকিউট হবে।
অ্যাসিঙ্ক্রোনাস কোড ব্যবহার করলে ইউজার ইন্টারফেস স্থির থাকে, যেমন পেজ রিফ্রেশ না করেই ডেটা ফেচ করা বা ইউজার অ্যাকশনের ভিত্তিতে কিছু পরিবর্তন করা। এতে ইউজারের অভিজ্ঞতা ভালো থাকে।
অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং অ্যাপ্লিকেশনটির কার্যক্ষমতা উন্নত করে, কারণ এটি একে একে সব কাজ করতে বাধ্য না হয়ে একাধিক কাজ একযোগে চালিয়ে যেতে পারে।
অ্যাসিঙ্ক্রোনাস কোড কম্পিউটার রিসোর্সের যথাযথ ব্যবহার নিশ্চিত করে। উদাহরণস্বরূপ, ডেটা ফেচ করার সময় UI থামবে না এবং অন্য কাজ করা যেতে পারে।
জাভাস্ক্রিপ্টে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এমন একটি পদ্ধতি যা সময়সাপেক্ষ কাজগুলো (যেমন ডেটাবেস রিকুয়েস্ট, ফাইল অপারেশন) চলাকালীন অন্যান্য কাজ করতে দেয়। এটি কলব্যাক, প্রমিস, এবং অ্যাসিঙ্ক/অওয়েইটের মাধ্যমে বাস্তবায়িত হয়। অ্যাসিঙ্ক্রোনাস কোড ইউজার ইন্টারফেসকে স্থির না রেখে কার্যক্ষমতা উন্নত করে এবং রিসোর্সের দক্ষ ব্যবহার নিশ্চিত করে। async
এবং await
এর মাধ্যমে কোড লেখার সময় পাঠযোগ্যতা বাড়ানো যায় এবং এটি একটি শক্তিশালী উপায় অ্যাসিঙ্ক্রোনাস কোড পরিচালনার জন্য।
common.read_more