Asynchronous Programming এবং Promises

কফিস্ক্রিপ্ট (CoffeeScript) - Web Development

269

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-এ অ্যাসিঙ্ক্রোনাস কোড লেখার এই পদ্ধতিগুলো কোডকে আরও পরিষ্কার এবং সহজ করে তোলে, বিশেষ করে যখন আপনি অনেক অ্যাসিঙ্ক্রোনাস অপারেশন একসাথে পরিচালনা করতে চান।

Content added By

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 এর সহজ সিনট্যাক্স কোড লেখাকে আরও দ্রুত এবং পরিষ্কার করে তোলে।

Content added By

Promises হল JavaScript-এর একটি শক্তিশালী বৈশিষ্ট্য যা অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করতে ব্যবহৃত হয়। CoffeeScript-এও আপনি সহজেই Promises ব্যবহার করতে পারেন, এবং এটি JavaScript-এ Promises ব্যবহারের মতোই কাজ করে। এখানে CoffeeScript-এ Promises-এর সাথে কাজ করার প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হলো।


Promise কী?

Promise হল একটি অ্যাসিঙ্ক্রোনাস অপারেশন যা ভবিষ্যতে একটি মান প্রদান করবে (বা ত্রুটি ঘটলে তা ক্যাচ করবে)। এটি তিনটি অবস্থায় থাকতে পারে:

  1. Pending (অপেক্ষমাণ): Promise এখনও সম্পূর্ণ হয়নি।
  2. Fulfilled (সম্পূর্ণ): Promise সফলভাবে সম্পন্ন হয়েছে।
  3. 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 এবং await CoffeeScript-এ অ্যাসিঙ্ক্রোনাস কোড লেখার জন্য আরও সহজ পদ্ধতি প্রদান করে।

CoffeeScript এবং Promises একসাথে ব্যবহার করলে অ্যাসিঙ্ক্রোনাস কাজ খুবই সহজ এবং পরিষ্কারভাবে করা যায়।

Content added By

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 এর সুবিধা

  1. ক্লিন কোড: async এবং await ব্যবহার করার মাধ্যমে অ্যাসিঙ্ক্রোনাস কোডকে সিনক্রোনাস কোডের মতো লেখা সম্ভব হয়, যা কোডকে আরও পরিষ্কার এবং পড়তে সহজ করে।
  2. প্রমিজ চেইনিং এড়ানো: async/await ব্যবহারের মাধ্যমে প্রমিজ চেইনিং সমস্যা দূর হয় এবং কোড আরও সোজা হয়।
  3. এরর হ্যান্ডলিং: try/catch ব্লকের মাধ্যমে অ্যাসিঙ্ক্রোনাস কোডে ত্রুটি হ্যান্ডলিং সহজ হয়।
  4. অ্যাক্টিভ কোডিং স্টাইল: অ্যাসিঙ্ক্রোনাস অপারেশনগুলোর সময়কালে কোডের কার্যকারিতা থামানো, পুনরায় কোড চালানো সহজ হয়ে যায়।

সারাংশ

CoffeeScript-এ async এবং await ব্যবহার করা অনেকটা JavaScript-এর মতোই, তবে CoffeeScript এর সংক্ষিপ্ত সিনট্যাক্স কোড লেখাকে আরও সহজ করে তোলে। আপনি async ফাংশন ব্যবহার করে অ্যাসিঙ্ক্রোনাস অপারেশনগুলোকে সিনক্রোনাস স্টাইলে লিখতে পারেন এবং await ব্যবহার করে সেই অপারেশনের ফলাফল পাওয়া না হওয়া পর্যন্ত বাকি কোডের কার্যকারিতা থামিয়ে দিতে পারেন। এই পদ্ধতি কোডকে আরও পরিষ্কার এবং কার্যকরী করে তোলে।

Content added By

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()

ব্যাখ্যা:

  • এখানে fetchData Promise ব্যবহার করে এবং যদি কিছু সমস্যা হয় তবে 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-এ অ্যাসিঙ্ক্রোনাস কোড লেখার জন্য আপনি নিচের পদ্ধতিগুলি ব্যবহার করতে পারেন:

  1. কলব্যাক ফাংশন - অ্যাসিঙ্ক্রোনাস কোডের জন্য একটি সাধারণ পদ্ধতি।
  2. Promises - আধুনিক এবং পরিষ্কার পদ্ধতি, যা অ্যাসিঙ্ক্রোনাস কাজ সহজ করে তোলে।
  3. Async/Await - Promise এর আরও পরিষ্কার এবং কার্যকর ব্যবহার, যা কোডকে সহজ এবং রিডেবল করে তোলে।
  4. Error Handling - try/catch বা .catch() ব্যবহার করে ত্রুটি পরিচালনা করা।
  5. Asynchronous Loops - একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একে একে চালানো।

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

Content added By
Promotion

Are you sure to start over?

Loading...