একটি কলব্যাক ফাংশন হ'ল এমন একটি ফাংশন যা আপনি অন্য ফাংশনে প্রবেশ করেন যাতে সেই ফাংশনটি পরবর্তী সময়ে এটি কল করতে পারে। এই সাধারণত অ্যাসিঙ্ক্রোনাস দেখা যায় এপিআই এর ; এআইপি কলটি তত্ক্ষণাত রিটার্ন দেয় কারণ এটি অ্যাসিনক্রোনাস,
জাভাস্ক্রিপ্টে আমি যে সহজ উদাহরণটি ভাবতে পারি তা হ'ল setTimeout()
ফাংশন। এটি একটি বিশ্বব্যাপী ফাংশন যা দুটি যুক্তি গ্রহণ করে। প্রথম যুক্তি হ'ল কলব্যাক ফাংশন এবং দ্বিতীয় যুক্তি হ'ল মিলিসেকেন্ডে বিলম্ব। ফাংশনটি উপযুক্ত সময়ের জন্য অপেক্ষা করার জন্য তৈরি করা হয়েছে, তারপরে আপনার কলব্যাক ফাংশনটি শুরু করুন।
setTimeout(function () {
console.log("10 seconds later...");
}, 10000);
আপনি উপরের কোডটি আগে দেখে থাকতে পারেন তবে আপনি যে ফাংশনটি দিয়ে যাচ্ছিলেন তা বুঝতে পারেননি কলব্যাক ফাংশন called এটি আরও সুস্পষ্ট করার জন্য আমরা উপরের কোডটি পুনরায় লিখতে পারি।
var callback = function () {
console.log("10 seconds later...");
};
setTimeout(callback, 10000);
নোডের সমস্ত জায়গাতেই কলব্যাকগুলি ব্যবহৃত হয় কারণ নোডটি যা কিছু করে তা স্থল থেকে তৈরি করে তৈরি করা হয় yn এমনকি ফাইল সিস্টেমের সাথে কথা বলার সময়ও। একারণে অভ্যন্তরীণ নোড এপিআইগুলির একটি সংখ্যক আপনি কোনও ভেরিয়েবলকে বরাদ্দ করতে পারবেন এমন ডেটা ফিরিয়ে দেওয়ার চেয়ে কলব্যাক ফাংশনকে আর্গুমেন্ট হিসাবে গ্রহণ করে। পরিবর্তে এটি আপনার কলব্যাক ফাংশন শুরু করবে, একটি যুক্তি হিসাবে আপনি যে ডেটা চেয়েছিলেন তা পাস করে passing উদাহরণস্বরূপ, আপনি fs
ফাইল পড়ার জন্য নোডের লাইব্রেরি ব্যবহার করতে পারেন । fs
মডিউল দুই অনন্য এপিআই ফাংশন অনাবৃত: readFile
এবং readFileSync
।
readFile
ফাংশন অ্যাসিঙ্ক্রোনাস যখন readFileSync
স্পষ্টত নয়। আপনি যে তারা আপনাকে ASYNC কল যখনই সম্ভব যেহেতু তারা তাদের ডেকে ব্যবহার করতে চান দেখতে পারেন readFile
এবং readFileSync
পরিবর্তে readFile
এবং readFileAsync
। উভয় ফাংশন ব্যবহার করার উদাহরণ এখানে is
সমলয়:
var data = fs.readFileSync('test.txt');
console.log(data);
উপরের কোড থ্রেড এক্সিকিউশন অবধি ব্লক করে যতক্ষণ না সমস্ত লিখিত সামগ্রী test.txt
মেমরিতে পড়ে এবং ভেরিয়েবলে সংরক্ষণ করা হয় data
। নোডে এটি সাধারণত খারাপ অভ্যাস হিসাবে বিবেচিত হয়। অনেক সময় যদিও এটি দরকারী, যেমন সহজ কিন্তু ক্লান্তিকর কিছু করার জন্য দ্রুত ছোট স্ক্রিপ্ট লেখার সময় এবং আপনি যতটা সময় ন্যানো সেকেন্ড পারেন সেগুলি সংরক্ষণ করার বিষয়ে আপনার খুব বেশি যত্ন নেই।
অ্যাসিঙ্ক্রোনাস (কলব্যাক সহ):
var callback = function (err, data) {
if (err) return console.error(err);
console.log(data);
};
fs.readFile('test.txt', callback);
প্রথমে আমরা একটি কলব্যাক ফাংশন তৈরি করি যা দুটি আর্গুমেন্ট গ্রহণ করে err
এবং data
। অ্যাসিনক্রোনাস ফাংশনগুলির মধ্যে একটি সমস্যা হ'ল ত্রুটিগুলি আটকাতে আরও বেশি কঠিন হয়ে ওঠে তাই প্রচুর কলব্যাক-স্টাইলের এপিআই ত্রুটিগুলি কলব্যাক ফাংশনের প্রথম যুক্তি হিসাবে পাস করে। err
অন্য কিছু করার আগে আপনার মূল্য আছে কিনা তা যাচাই করা ভাল অনুশীলন । যদি তা হয় তবে কলব্যাকের সম্পাদন বন্ধ করুন এবং ত্রুটিটি লগ করুন।
সিঙ্ক্রোনাস কলগুলির একটি সুবিধা রয়েছে যখন সেখানে ছোঁড়া ব্যতিক্রম থাকে কারণ আপনি কেবল এগুলিকে একটি try/catch
ব্লক দিয়ে ধরতে পারেন ।
try {
var data = fs.readFileSync('test.txt');
console.log(data);
} catch (err) {
console.error(err);
}
অ্যাসিঙ্ক্রোনাস ফাংশনে এটি সেভাবে কাজ করে না। তাত্ক্ষণিকভাবে এপিআই কলটি ফিরে আসে তাই এর সাথে ধরার কিছুই নেই try/catch
। কলব্যাকগুলি ব্যবহার করে এমন উপযুক্ত অ্যাসিঙ্ক্রোনাস এপিআই সর্বদা তাদের নিজস্ব ত্রুটিগুলি ধরে ফেলবে এবং তারপরে সেই ত্রুটিগুলি কলব্যাকের মধ্যে পাস করবে যেখানে আপনি এটি উপযুক্ত হিসাবে দেখতে পাবে handle
কলব্যাকস ছাড়াও, এপিআইয়ের আরও একটি জনপ্রিয় স্টাইল রয়েছে যা সাধারণত প্রতিশ্রুতি হিসাবে ব্যবহৃত হয়। আপনি তাদের সম্পর্কে পড়তে চান তাহলে তারপর আপনি সমগ্র ব্লগ পোস্টে আমি এই উত্তর ভিত্তিক লিখেছিলেন পড়তে পারেন এখানে ।