CoffeeScript, JavaScript-এর মতোই Asynchronous Programming সমর্থন করে, যেখানে callback ফাংশন, Promises, এবং async/await ব্যবহার করা হয়। CoffeeScript কোড JavaScript-এ কম্পাইল হওয়ার পর এসব ফিচার সমর্থন পায় এবং কোড লেখার অভিজ্ঞতাকে আরও সহজ এবং কার্যকর করে তোলে।
এখানে Asynchronous Programming এবং Promises ব্যবহারের বিস্তারিত আলোচনা করা হলো।
১. Asynchronous Programming
Asynchronous Programming বা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এমন একটি প্রোগ্রামিং প্যাটার্ন যেখানে কিছু অপারেশন এক্সিকিউশন সম্পন্ন হওয়ার জন্য অপেক্ষা না করে পরবর্তী কোড এক্সিকিউট হয়। JavaScript (এবং CoffeeScript) অ্যাসিঙ্ক্রোনাস কোডের জন্য বিভিন্ন উপায় প্রদান করে, যেমন callbacks, Promises, এবং async/await।
১.১. Callback Functions
callback ফাংশন হল সেই ফাংশন যা অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে পাস করা হয় এবং কিছু অপারেশন সম্পন্ন হলে এটি কল হয়। CoffeeScript-এ callback ব্যবহারের পদ্ধতি অনেকটা JavaScript-এর মতো।
উদাহরণ:
# সিমুলেটেড অ্যাসিঙ্ক্রোনাস অপারেশন
doAsyncTask = (callback) ->
setTimeout ->
result = "Task Complete"
callback result
, 2000
doAsyncTask (result) ->
console.log result
এখানে, doAsyncTask ফাংশনটি একটি সিমুলেটেড অ্যাসিঙ্ক্রোনাস অপারেশন চালায় (যেমন setTimeout ব্যবহার করে), এবং কাজ সম্পন্ন হলে callback ফাংশনটি কল করা হয়।
JavaScript-এ কম্পাইল হওয়া:
var doAsyncTask;
doAsyncTask = function(callback) {
return setTimeout(function() {
var result;
result = "Task Complete";
return callback(result);
}, 2000);
};
doAsyncTask(function(result) {
return console.log(result);
});
২. Promises
Promises হল একটি JavaScript অবজেক্ট যা একটি অ্যাসিঙ্ক্রোনাস অপারেশনের ভবিষ্যত ফলাফল ধারণ করে। এটি তিনটি স্টেটে থাকতে পারে:
- Pending: Promise এখনও পূর্ণ হয়নি।
- Fulfilled: Promise সফলভাবে পূর্ণ হয়েছে।
- Rejected: Promise ব্যর্থ হয়েছে।
CoffeeScript-এ Promise ব্যবহারের জন্য new Promise ব্যবহার করা হয়।
২.১. Basic Promise Example
# সিমুলেটেড অ্যাসিঙ্ক্রোনাস অপারেশন
doAsyncTask = ->
new Promise (resolve, reject) ->
setTimeout ->
result = "Task Complete"
resolve result
, 2000
doAsyncTask().then (result) ->
console.log result
এখানে, doAsyncTask একটি Promise রিটার্ন করে, যা পরে .then() চেইনিং ব্যবহার করে ক্যাচ করা হয়। resolve কল করলে Promise পূর্ণ হবে এবং then ব্লক এক্সিকিউট হবে।
JavaScript-এ কম্পাইল হওয়া:
var doAsyncTask;
doAsyncTask = function() {
return new Promise(function(resolve, reject) {
return setTimeout(function() {
var result;
result = "Task Complete";
return resolve(result);
}, 2000);
});
};
doAsyncTask().then(function(result) {
return console.log(result);
});
৩. Promise with Error Handling (Rejecting Promises)
আপনি যদি Promise-এ কোনো ত্রুটি হ্যান্ডেল করতে চান, তবে reject ব্যবহার করা হয় এবং .catch() ব্যবহার করে ত্রুটির কথা বলা হয়।
উদাহরণ:
doAsyncTask = ->
new Promise (resolve, reject) ->
setTimeout ->
error = false
if error
reject "Something went wrong!"
else
resolve "Task Complete"
, 2000
doAsyncTask().then (result) ->
console.log result
.catch (error) ->
console.error error
এখানে, যদি কোনো ত্রুটি ঘটে, তবে reject কল করা হয় এবং .catch() ব্লকটি ত্রুটি ধরতে সক্ষম হয়।
JavaScript-এ কম্পাইল হওয়া:
var doAsyncTask;
doAsyncTask = function() {
return new Promise(function(resolve, reject) {
return setTimeout(function() {
var error, result;
error = false;
if (error) {
return reject("Something went wrong!");
} else {
result = "Task Complete";
return resolve(result);
}
}, 2000);
});
};
doAsyncTask().then(function(result) {
return console.log(result);
}).catch(function(error) {
return console.error(error);
});
৪. Async/Await
CoffeeScript-এ ES7-এর async/await সিনট্যাক্সও সমর্থিত, যা Promises-এর সাথে কাজ করার আরও সহজ এবং পরিষ্কার পদ্ধতি প্রদান করে।
৪.১. Async/Await ব্যবহার করে Promise সমাধান করা
doAsyncTask = ->
new Promise (resolve, reject) ->
setTimeout ->
resolve "Task Complete"
, 2000
async runTask = ->
result = await doAsyncTask()
console.log result
runTask()
এখানে, await ব্যবহার করে Promise-এর সমাধানটি অপেক্ষা করা হয় এবং তারপর ফলাফল প্রিন্ট করা হয়। async ফাংশন অবশ্যই Promise রিটার্ন করতে হবে।
JavaScript-এ কম্পাইল হওয়া:
var doAsyncTask, runTask;
doAsyncTask = function() {
return new Promise(function(resolve, reject) {
return setTimeout(function() {
return resolve("Task Complete");
}, 2000);
});
};
runTask = async function() {
var result;
result = await doAsyncTask();
return console.log(result);
};
runTask();
সারাংশ
- Callback Functions: CoffeeScript-এ callback ফাংশন ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করা যায়, তবে এটি কিছুটা জটিল হতে পারে।
- Promises:
Promisesঅ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনার জন্য ব্যবহৃত হয় এবং.then()ও.catch()ব্যবহার করে ফলাফল বা ত্রুটি হ্যান্ডেল করা যায়। - Async/Await:
async/awaitসিনট্যাক্স আরো সহজ এবং পরিষ্কার উপায়ে Promises ব্যবহার করার সুযোগ দেয়।
CoffeeScript-এ অ্যাসিঙ্ক্রোনাস কোড লেখার এই পদ্ধতিগুলো কোডকে আরও পরিষ্কার এবং সহজ করে তোলে, বিশেষ করে যখন আপনি অনেক অ্যাসিঙ্ক্রোনাস অপারেশন একসাথে পরিচালনা করতে চান।
Callback হলো একটি ফাংশন যা অন্য একটি ফাংশন সম্পন্ন হওয়ার পরে চালিত হয়। CoffeeScript-এ callback ব্যবহার করা JavaScript-এর মতোই, তবে CoffeeScript-এর সংক্ষিপ্ত সিনট্যাক্স কোডটিকে আরও পরিষ্কার এবং সহজ করে তোলে। CoffeeScript-এ callback ফাংশন প্রাথমিকভাবে অ্যাসিঙ্ক্রোনাস কার্যকলাপের জন্য ব্যবহৃত হয়, যেমন ইভেন্ট হ্যান্ডলিং বা HTTP রিকোয়েস্ট।
CoffeeScript-এ Callback এর সাধারণ ব্যবহার
CoffeeScript-এ একটি ফাংশনকে অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে পাঠানোর মাধ্যমে callback ব্যবহার করা হয়।
উদাহরণ: একটি Callback ফাংশন ব্যবহার
greet = (name, callback) ->
console.log "Hello, #{name}!"
callback() # কলব্যাক ফাংশনটি কল করা হচ্ছে
goodbye = ->
console.log "Goodbye!"
greet "Alice", goodbye
এখানে:
greetএকটি ফাংশন যা দুটি আর্গুমেন্ট নেয়:nameএবংcallback।goodbyeএকটি ফাংশন যা কলব্যাক হিসেবেgreetফাংশনে পাঠানো হয়েছে।- যখন
greetফাংশনটিcallback()কল করে, এটিgoodbyeফাংশনটি কল করবে, যা "Goodbye!" প্রিন্ট করবে।
JavaScript-এ কম্পাইল হওয়া কোড:
var greet, goodbye;
greet = function(name, callback) {
console.log("Hello, " + name + "!");
return callback();
};
goodbye = function() {
return console.log("Goodbye!");
};
greet("Alice", goodbye);
CoffeeScript-এ অ্যাসিঙ্ক্রোনাস Callback ব্যবহার
একটি সাধারণ অ্যাসিঙ্ক্রোনাস callback ব্যবহারের উদাহরণ, যেমন সেটTimeout ব্যবহার করা:
উদাহরণ: অ্যাসিঙ্ক্রোনাস Callback
fetchData = (callback) ->
console.log "Fetching data..."
setTimeout ->
data = "Data received"
callback(data)
, 2000 # 2 সেকেন্ড পর কলব্যাক ফাংশন কল হবে
processData = (data) ->
console.log "Processing: #{data}"
fetchData processData
এখানে:
fetchDataএকটি অ্যাসিঙ্ক্রোনাস ফাংশন যা ২ সেকেন্ড পরprocessDataফাংশনকে কল করে।setTimeoutব্যবহার করা হয়েছে একটি দেরী ফাংশন কল করার জন্য।- ২ সেকেন্ড পর
processDataফাংশনটিfetchDataএর কলব্যাক হিসেবে চালু হবে এবং "Processing: Data received" প্রিন্ট করবে।
JavaScript-এ কম্পাইল হওয়া কোড:
var fetchData, processData;
fetchData = function(callback) {
console.log("Fetching data...");
return setTimeout(function() {
var data;
data = "Data received";
return callback(data);
}, 2000);
};
processData = function(data) {
return console.log("Processing: " + data);
};
fetchData(processData);
CoffeeScript-এ Callback ফাংশনের অ্যারো সিনট্যাক্স ব্যবহার
CoffeeScript-এ => (অ্যারো ফাংশন) ব্যবহার করে callback ফাংশন আরও সহজভাবে ডিফাইন করা যায়। এটি this প্রসঙ্গ সঠিকভাবে পরিচালনা করতে সাহায্য করে।
উদাহরণ: অ্যারো ফাংশন সহ Callback
fetchData = (callback) ->
console.log "Fetching data..."
setTimeout =>
data = "Data received"
callback(data)
, 2000
processData = (data) ->
console.log "Processing: #{data}"
fetchData processData
এখানে:
setTimeoutএর মধ্যে=>ব্যবহার করা হয়েছে যাতেthisপ্রসঙ্গ সঠিকভাবে কাজ করে এবং callback ফাংশনটি সঠিকভাবে চালু হয়।
JavaScript-এ কম্পাইল হওয়া কোড:
var fetchData, processData;
fetchData = function(callback) {
console.log("Fetching data...");
return setTimeout(function() {
var data;
data = "Data received";
return callback(data);
}, 2000);
};
processData = function(data) {
return console.log("Processing: " + data);
};
fetchData(processData);
Callback Error Handling (অ্যারোর হ্যান্ডলিং)
অ্যাসিঙ্ক্রোনাস ফাংশনগুলোর মধ্যে error handling এর জন্য callback ব্যবহার করা যেতে পারে। সাধারণত, অ্যাসিঙ্ক্রোনাস ফাংশনে একটি প্রথম প্যারামিটার হিসেবে error পাঠানো হয়, যাতে error হলে তা হ্যান্ডল করা যায়।
উদাহরণ: Error Handling সহ Callback
fetchData = (callback) ->
console.log "Fetching data..."
setTimeout ->
error = false
if error
callback("Error occurred", null)
else
data = "Data received"
callback(null, data)
, 2000
processData = (error, data) ->
if error
console.log "Error: #{error}"
else
console.log "Processing: #{data}"
fetchData processData
এখানে:
fetchDataএকটি error এবং ডেটা উভয়ই কলব্যাক আর্গুমেন্ট হিসেবে পাঠায়। যদি কোনো error ঘটে, তাহলে প্রথম প্যারামিটারerrorহবে।processDataফাংশনটি error বা ডেটা অনুযায়ী সংশ্লিষ্ট কাজ করবে।
JavaScript-এ কম্পাইল হওয়া কোড:
var fetchData, processData;
fetchData = function(callback) {
console.log("Fetching data...");
return setTimeout(function() {
var error, data;
error = false;
if (error) {
return callback("Error occurred", null);
} else {
data = "Data received";
return callback(null, data);
}
}, 2000);
};
processData = function(error, data) {
if (error) {
return console.log("Error: " + error);
} else {
return console.log("Processing: " + data);
}
};
fetchData(processData);
সারাংশ
- Callback CoffeeScript-এ একটি ফাংশন যা অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে পাস করা হয় এবং সেই ফাংশনটি নির্দিষ্ট সময়ে চালিত হয়।
- CoffeeScript-এ asynchronous callback ব্যবহার করে আপনি অ্যাসিঙ্ক্রোনাস কার্যকলাপ যেমন
setTimeout,fs.readFile, বা API কলগুলি পরিচালনা করতে পারেন। - Error handling সহ callback ব্যবহারের মাধ্যমে অ্যাসিঙ্ক্রোনাস কার্যকলাপে ত্রুটি পরিচালনা করা যায়।
- CoffeeScript এর arrow functions (
=>) কলব্যাক ফাংশনগুলোকে আরও পরিষ্কার ও কার্যকরী করে, বিশেষ করেthisপ্রসঙ্গের সাথে কাজ করার সময়।
CoffeeScript-এ callback ব্যবহার করা JavaScript এর মতোই, তবে CoffeeScript এর সহজ সিনট্যাক্স কোড লেখাকে আরও দ্রুত এবং পরিষ্কার করে তোলে।
Promises হল JavaScript-এর একটি শক্তিশালী বৈশিষ্ট্য যা অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করতে ব্যবহৃত হয়। CoffeeScript-এও আপনি সহজেই Promises ব্যবহার করতে পারেন, এবং এটি JavaScript-এ Promises ব্যবহারের মতোই কাজ করে। এখানে CoffeeScript-এ Promises-এর সাথে কাজ করার প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হলো।
Promise কী?
Promise হল একটি অ্যাসিঙ্ক্রোনাস অপারেশন যা ভবিষ্যতে একটি মান প্রদান করবে (বা ত্রুটি ঘটলে তা ক্যাচ করবে)। এটি তিনটি অবস্থায় থাকতে পারে:
- Pending (অপেক্ষমাণ): Promise এখনও সম্পূর্ণ হয়নি।
- Fulfilled (সম্পূর্ণ): Promise সফলভাবে সম্পন্ন হয়েছে।
- Rejected (প্রত্যাখ্যানিত): Promise ব্যর্থ হয়েছে।
CoffeeScript-এ Promise ব্যবহার
CoffeeScript-এ Promise ব্যবহার করার জন্য JavaScript-এর মতো একই সিনট্যাক্স ব্যবহার করতে হয়। CoffeeScript কোডটি আরও সংক্ষিপ্ত হয়, তবে Promise-এর মৌলিক কার্যকলাপ একই থাকে।
উদাহরণ: একটি Promise তৈরি করা
promise = new Promise (resolve, reject) ->
# কিছু অ্যাসিঙ্ক্রোনাস কাজ
if success
resolve "Operation successful!"
else
reject "Operation failed!"
এখানে, new Promise ব্যবহার করে একটি নতুন Promise তৈরি করা হয়েছে। resolve এবং reject হল ফাংশন যা Promise-এর স্টেট পরিবর্তন করতে ব্যবহৃত হয়।
JavaScript-এ কম্পাইল হওয়া কোড:
var promise;
promise = new Promise(function(resolve, reject) {
// কিছু অ্যাসিঙ্ক্রোনাস কাজ
if (success) {
resolve("Operation successful!");
} else {
reject("Operation failed!");
}
});
Promise এর then এবং catch ব্যবহার
Promise পূর্ণ হলে বা ব্যর্থ হলে .then() এবং .catch() মেথড ব্যবহার করে সেই ফলাফলটি হ্যান্ডেল করা হয়।
উদাহরণ: .then() এবং .catch() ব্যবহার করা
promise = new Promise (resolve, reject) ->
# কিছু অ্যাসিঙ্ক্রোনাস কাজ
if success
resolve "Operation successful!"
else
reject "Operation failed!"
promise.then (result) ->
console.log result # "Operation successful!" যদি Promise সফল হয়
.catch (error) ->
console.log error # "Operation failed!" যদি Promise ব্যর্থ হয়
এখানে:
.then()মেথড Promise সফল হলে কল হবে এবং সফল ফলাফল পাবে।.catch()মেথড Promise ব্যর্থ হলে কল হবে এবং ত্রুটির বার্তা পাবে।
JavaScript-এ কম্পাইল হওয়া কোড:
var promise;
promise = new Promise(function(resolve, reject) {
// কিছু অ্যাসিঙ্ক্রোনাস কাজ
if (success) {
resolve("Operation successful!");
} else {
reject("Operation failed!");
}
});
promise.then(function(result) {
return console.log(result); // "Operation successful!" যদি Promise সফল হয়
}).catch(function(error) {
return console.log(error); // "Operation failed!" যদি Promise ব্যর্থ হয়
});
Multiple Promises: Promise.all() এবং Promise.race()
যখন একাধিক Promise একসাথে পরিচালনা করতে হয়, তখন Promise.all() এবং Promise.race() ব্যবহৃত হয়।
১. Promise.all() – সব Promise সফল হলে then কল হয়
Promise.all() একাধিক Promise গ্রহণ করে এবং তাদের সবগুলো সফল হলে একটি একক .then() কল করে।
promise1 = new Promise (resolve) -> resolve "First promise"
promise2 = new Promise (resolve) -> resolve "Second promise"
Promise.all([promise1, promise2]).then (results) ->
console.log results # ["First promise", "Second promise"]
২. Promise.race() – প্রথমে যে Promise সম্পন্ন হবে, সেই Promise এর রেজাল্ট পাবে
Promise.race() একাধিক Promise গ্রহণ করে এবং প্রথম যে Promise সম্পন্ন হবে তার রেজাল্ট পায়।
promise1 = new Promise (resolve, reject) ->
setTimeout resolve, 100, "First promise completed"
promise2 = new Promise (resolve, reject) ->
setTimeout resolve, 200, "Second promise completed"
Promise.race([promise1, promise2]).then (result) ->
console.log result # "First promise completed"
এখানে, promise1 এবং promise2 একসাথে চলে, কিন্তু যেহেতু promise1 প্রথমে সম্পন্ন হচ্ছে, তাই Promise.race() তার রেজাল্ট প্রথমে পাবে।
CoffeeScript-এ Async/Await ব্যবহার করা
CoffeeScript-এ async এবং await ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোড লেখার পদ্ধতি আরও সহজ এবং পরিষ্কার হয়।
উদাহরণ: async এবং await ব্যবহার করা
async fetchData = ->
try
result = await someAsyncFunction()
console.log result
catch error
console.log error
fetchData()
এখানে async ফাংশনটি Promise রিটার্ন করে এবং await ব্যবহার করে অ্যাসিঙ্ক্রোনাস কাজের ফলাফল পাওয়া হয়। যদি কোন ত্রুটি ঘটে তবে তা catch ব্লকে ধরা হয়।
JavaScript-এ কম্পাইল হওয়া কোড:
var fetchData;
fetchData = async function() {
try {
var result;
result = await someAsyncFunction();
console.log(result);
} catch (error) {
console.log(error);
}
};
fetchData();
সারাংশ
- Promises CoffeeScript-এ JavaScript-এর মতো কাজ করে, তবে এটি আরও সোজা এবং সংক্ষিপ্ত।
.then()এবং.catch()Promise-এর সফলতা বা ব্যর্থতার উপর নির্ভর করে ফলাফল হ্যান্ডেল করে।Promise.all()এবংPromise.race()একাধিক Promise পরিচালনার জন্য ব্যবহৃত হয়।asyncএবংawaitCoffeeScript-এ অ্যাসিঙ্ক্রোনাস কোড লেখার জন্য আরও সহজ পদ্ধতি প্রদান করে।
CoffeeScript এবং Promises একসাথে ব্যবহার করলে অ্যাসিঙ্ক্রোনাস কাজ খুবই সহজ এবং পরিষ্কারভাবে করা যায়।
Async/Await একটি আধুনিক JavaScript ফিচার যা অ্যাসিঙ্ক্রোনাস কোড লেখা সহজ করে। CoffeeScript-এ এই ফিচারটি ব্যবহার করার মাধ্যমে আপনি অ্যাসিঙ্ক্রোনাস কোড আরও পরিষ্কার এবং সিনক্রোনাস কোডের মতো লেখা সম্ভব হবে। CoffeeScript-এ async এবং await ব্যবহার করতে JavaScript এর মতই সিনট্যাক্স প্রয়োগ করা হয়, তবে CoffeeScript এর সিনট্যাক্স আরও সংক্ষিপ্ত এবং পরিষ্কার।
Async/Await কী?
async: ফাংশনকে অ্যাসিঙ্ক্রোনাস ফাংশনে রূপান্তরিত করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে ফাংশনটি একটিPromiseরিটার্ন করবে।await: এটিasyncফাংশনের মধ্যে ব্যবহৃত হয় এবং একটিPromiseএর ফলাফল পাওয়া না হওয়া পর্যন্ত বাকি কোডের কার্যকারিতা থামিয়ে দেয়।
CoffeeScript-এ Async/Await ব্যবহার
CoffeeScript-এ async এবং await ব্যবহার করার পদ্ধতি JavaScript-এর মতোই, তবে CoffeeScript-এর সিনট্যাক্সে কোড আরও সংক্ষিপ্ত হয়।
১. Async ফাংশন ঘোষণা
CoffeeScript-এ async ফাংশন ঘোষণা করার জন্য সোজা async কীওয়ার্ড ব্যবহার করা হয়।
async fetchData = ->
console.log "Fetching data..."
return "Data fetched"
এই ফাংশনটি একটি Promise রিটার্ন করবে।
২. Await ব্যবহার
await কে async ফাংশনের মধ্যে ব্যবহার করতে হয়, এবং এটি একটি Promise এর রেজাল্ট পাওয়ার জন্য অপেক্ষা করবে।
async getData = ->
result = await fetchData()
console.log result # আউটপুট: Data fetched
এখানে, await fetchData() ফাংশনের Promise রেজাল্ট পাওয়ার জন্য অপেক্ষা করবে এবং পরে সেই রেজাল্ট result-এ স্টোর হবে।
৩. Error handling (Try/Catch)
async ফাংশনের মধ্যে try/catch ব্যবহার করে আপনি ভুল হ্যান্ডলিং করতে পারেন। যদি কোনো Promise ত্রুটি দেয়, catch ব্লক তা ধরতে সাহায্য করে।
async fetchDataWithErrorHandling = ->
try
result = await fetchData()
console.log result
catch error
console.log "Error occurred: #{error.message}"
উদাহরণ: CoffeeScript-এ Async/Await ব্যবহার
ধরা যাক, আপনার কাছে একটি API কল রয়েছে যা কিছু ডেটা ফেচ করবে। আপনি async এবং await ব্যবহার করে সেই ডেটা ফেচ করতে পারেন।
কোড:
# ফাংশন যা API কল সিমুলেট করবে
async fetchDataFromAPI = ->
console.log "Fetching data from API..."
# একটি Promise রিটার্ন করা হচ্ছে
return new Promise (resolve, reject) ->
setTimeout ->
resolve "Data from API fetched successfully"
, 2000
# প্রধান ফাংশন
async main = ->
data = await fetchDataFromAPI()
console.log data # আউটপুট: Data from API fetched successfully
main()
ব্যাখ্যা:
fetchDataFromAPIএকটিasyncফাংশন, যা ২ সেকেন্ড পরে ডেটা ফেচ করে একটিPromiseরিটার্ন করে।mainফাংশনawaitব্যবহার করেfetchDataFromAPI()এর রেজাল্ট পাওয়ার জন্য অপেক্ষা করে এবং তারপর সেটি কনসোলে প্রিন্ট করে।
আউটপুট:
Fetching data from API...
Data from API fetched successfully
CoffeeScript-এ Async/Await এর সুবিধা
- ক্লিন কোড:
asyncএবংawaitব্যবহার করার মাধ্যমে অ্যাসিঙ্ক্রোনাস কোডকে সিনক্রোনাস কোডের মতো লেখা সম্ভব হয়, যা কোডকে আরও পরিষ্কার এবং পড়তে সহজ করে। - প্রমিজ চেইনিং এড়ানো:
async/awaitব্যবহারের মাধ্যমে প্রমিজ চেইনিং সমস্যা দূর হয় এবং কোড আরও সোজা হয়। - এরর হ্যান্ডলিং:
try/catchব্লকের মাধ্যমে অ্যাসিঙ্ক্রোনাস কোডে ত্রুটি হ্যান্ডলিং সহজ হয়। - অ্যাক্টিভ কোডিং স্টাইল: অ্যাসিঙ্ক্রোনাস অপারেশনগুলোর সময়কালে কোডের কার্যকারিতা থামানো, পুনরায় কোড চালানো সহজ হয়ে যায়।
সারাংশ
CoffeeScript-এ async এবং await ব্যবহার করা অনেকটা JavaScript-এর মতোই, তবে CoffeeScript এর সংক্ষিপ্ত সিনট্যাক্স কোড লেখাকে আরও সহজ করে তোলে। আপনি async ফাংশন ব্যবহার করে অ্যাসিঙ্ক্রোনাস অপারেশনগুলোকে সিনক্রোনাস স্টাইলে লিখতে পারেন এবং await ব্যবহার করে সেই অপারেশনের ফলাফল পাওয়া না হওয়া পর্যন্ত বাকি কোডের কার্যকারিতা থামিয়ে দিতে পারেন। এই পদ্ধতি কোডকে আরও পরিষ্কার এবং কার্যকরী করে তোলে।
CoffeeScript, JavaScript এর মতোই, অ্যাসিঙ্ক্রোনাস কোড পরিচালনার জন্য বিভিন্ন পদ্ধতি সমর্থন করে। এটি অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং সহজ করে তোলে, যা দীর্ঘ-running অপারেশন যেমন API কল, ডাটাবেজ থেকে ডেটা পড়া, বা ফাইল সিস্টেম অপারেশনের জন্য ব্যবহৃত হয়। CoffeeScript-এ অ্যাসিঙ্ক্রোনাস কোড লেখা অনেকটাই JavaScript-এর মতো, তবে এটি আরও সংক্ষিপ্ত এবং সহজলভ্য।
১. কলব্যাক (Callback) ফাংশন
অ্যাসিঙ্ক্রোনাস কাজের জন্য একটি সাধারণ পদ্ধতি হল কলব্যাক ফাংশন। একটি ফাংশন চলতে থাকা অবস্থায় অন্য ফাংশন কল করা হয় এবং তার কাজ শেষ হওয়ার পর কলব্যাক ফাংশনটি কার্যকর হয়।
উদাহরণ: কলব্যাক ব্যবহার
fs = require 'fs'
fs.readFile 'file.txt', 'utf8', (err, data) ->
if err
console.log "Error reading file: #{err}"
else
console.log "File content: #{data}"
ব্যাখ্যা:
- এখানে
fs.readFileএকটি অ্যাসিঙ্ক্রোনাস ফাংশন, এবং এটি একটি কলব্যাক ফাংশন গ্রহণ করে। ফাইলটি পড়া হলে, কলব্যাক ফাংশনটিdataএবংerrআর্গুমেন্ট সহ চলে আসে। errযদিnullহয়, তাহলে ফাইলটি সফলভাবে পড়া হয়েছে, অন্যথায় ত্রুটি ঘটেছে।
২. Promises
Promises একটি আধুনিক পদ্ধতি যা অ্যাসিঙ্ক্রোনাস কাজের জন্য ব্যবহৃত হয়। এটি একটি resolve বা reject কন্ডিশন প্রদান করে, যাতে আপনি পরবর্তী কোড নির্ধারণ করতে পারেন।
উদাহরণ: Promise ব্যবহার
fetchData = ->
new Promise (resolve, reject) ->
setTimeout ->
data = "Some data"
resolve data
, 1000
fetchData().then (data) ->
console.log "Received data: #{data}"
ব্যাখ্যা:
fetchDataএকটি Promise রিটার্ন করে, যা 1 সেকেন্ড পরresolveকরে "Some data" পাঠায়।.then()ব্যবহার করে আমরা Promise-এর রেজাল্ট পেতে পারি, যা অ্যাসিঙ্ক্রোনাস কাজের পরবর্তী স্টেপ হিসেবে কাজ করে।
৩. Async/Await
async/await হল একটি আধুনিক পদ্ধতি যা Promise-কে আরও পরিষ্কারভাবে ব্যবহার করতে সাহায্য করে। এটি কোডের রিডেবিলিটি এবং স্ট্রাকচার উন্নত করে। async ফাংশন একটি Promise রিটার্ন করে, এবং await কিওয়ার্ড Promise এর রেজাল্ট পাওয়ার আগে কোডটি অপেক্ষা করতে নির্দেশ দেয়।
উদাহরণ: Async/Await ব্যবহার
fetchData = ->
new Promise (resolve, reject) ->
setTimeout ->
data = "Fetched data"
resolve data
, 1000
getData = async ->
data = await fetchData()
console.log "Data received: #{data}"
getData()
ব্যাখ্যা:
fetchDataএকটি Promise রিটার্ন করে, এবংawaitব্যবহারের মাধ্যমে আমরা এই Promise এর রেজাল্ট পাই, যাতে কোড আরও সোজা এবং পরিষ্কার হয়।getDataএকটিasyncফাংশন, এবংawaitব্যবহার করে এটিfetchDataথেকে আসা ফলাফল পায় এবং এরপর কাজ চালিয়ে যায়।
৪. Error Handling (অ্যাসিঙ্ক্রোনাস কোডে ত্রুটি পরিচালনা)
অ্যাসিঙ্ক্রোনাস কোডে ত্রুটি পরিচালনার জন্য try/catch ব্লক বা Promise এর .catch() ব্যবহার করা যেতে পারে। async/await পদ্ধতিতে ত্রুটি ধরতে try/catch ব্যবহার করা সহজ।
উদাহরণ: async/await-এ ত্রুটি পরিচালনা
fetchData = ->
new Promise (resolve, reject) ->
setTimeout ->
err = true
if err
reject "Error occurred!"
else
resolve "Fetched data"
, 1000
getData = async ->
try
data = await fetchData()
console.log "Data received: #{data}"
catch err
console.log "Caught an error: #{err}"
getData()
ব্যাখ্যা:
- এখানে
fetchDataPromise ব্যবহার করে এবং যদি কিছু সমস্যা হয় তবেrejectকরে ত্রুটি পাঠায়। getDataফাংশনেtry/catchব্যবহার করা হয়েছে যাতে Promise থেকে আসা ত্রুটি ধরা যায় এবং হ্যান্ডেল করা যায়।
৫. Asynchronous Loops
CoffeeScript-এ অ্যাসিঙ্ক্রোনাস লুপও ব্যবহার করা যেতে পারে, যেমন যখন আপনাকে একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একে একে চালাতে হয়।
উদাহরণ: অ্যাসিঙ্ক্রোনাস লুপ
processData = (data) ->
new Promise (resolve) ->
setTimeout ->
resolve "Processed #{data}"
, 1000
processAll = async ->
dataList = ['item1', 'item2', 'item3']
for data in dataList
result = await processData(data)
console.log result
processAll()
ব্যাখ্যা:
processAllফাংশনটি একটি অ্যাসিঙ্ক্রোনাস লুপ যা প্রতিটি আইটেমের জন্যprocessDataফাংশনকেawaitকরে চালায়।- প্রতিটি প্রক্রিয়াকরণ শেষে ফলাফল প্রিন্ট করা হয়।
সারাংশ
CoffeeScript-এ অ্যাসিঙ্ক্রোনাস কোড লেখার জন্য আপনি নিচের পদ্ধতিগুলি ব্যবহার করতে পারেন:
- কলব্যাক ফাংশন - অ্যাসিঙ্ক্রোনাস কোডের জন্য একটি সাধারণ পদ্ধতি।
- Promises - আধুনিক এবং পরিষ্কার পদ্ধতি, যা অ্যাসিঙ্ক্রোনাস কাজ সহজ করে তোলে।
- Async/Await - Promise এর আরও পরিষ্কার এবং কার্যকর ব্যবহার, যা কোডকে সহজ এবং রিডেবল করে তোলে।
- Error Handling -
try/catchবা.catch()ব্যবহার করে ত্রুটি পরিচালনা করা। - Asynchronous Loops - একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একে একে চালানো।
CoffeeScript-এ অ্যাসিঙ্ক্রোনাস কোড ব্যবহারের মাধ্যমে আপনি আপনার প্রোগ্রামের পারফরম্যান্স উন্নত করতে পারবেন এবং অ্যাসিঙ্ক্রোনাস কাজগুলিকে আরও পরিষ্কারভাবে পরিচালনা করতে পারবেন।
Read more