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-এ অ্যাসিঙ্ক্রোনাস কোড ব্যবহারের মাধ্যমে আপনি আপনার প্রোগ্রামের পারফরম্যান্স উন্নত করতে পারবেন এবং অ্যাসিঙ্ক্রোনাস কাজগুলিকে আরও পরিষ্কারভাবে পরিচালনা করতে পারবেন।