নোডজেস কলব্যাকস সাধারণ উদাহরণ


120

যে কেউ আমাকে নোডজেস কলব্যাকের সহজ উদাহরণ দিতে পারে, আমি ইতিমধ্যে অনেক ওয়েবসাইটে একই সন্ধান করেছি কিন্তু এটি সঠিকভাবে বুঝতে সক্ষম হয় নি, দয়া করে আমাকে একটি সহজ উদাহরণ দিন।

getDbFiles(store, function(files){
    getCdnFiles(store, function(files){
    })
})

আমি এরকম কিছু করতে চাই ...


যুক্তি হিসাবে কলব্যাক গ্রহণ করে এমন একটি ফাংশন কীভাবে লিখবেন তার একটি উদাহরণ?
Gntem

হ্যাঁ এরকম কিছু, কোনও সাধারণ উদাহরণ যা আমাকে এটি বুঝতে সহায়তা করে।
ভূষণ গোয়েল

2
কলব্যাক হ'ল এমন একটি ফাংশন যা আপনি অন্য ফাংশনে প্যারামিটার হিসাবে পাস করেন ... গুগল pls -> "কলব্যাক জাভাস্ক্রিপ্ট" -> প্রথম ফলাফল
গ্যাব্রিয়েল লালামাস

উত্তর:


198
var myCallback = function(data) {
  console.log('got data: '+data);
};

var usingItNow = function(callback) {
  callback('get it?');
};

এখন নোড বা ব্রাউজার কনসোলটি খুলুন এবং উপরের সংজ্ঞাগুলি আটকে দিন।

শেষ পর্যন্ত এই পরবর্তী লাইনে এটি ব্যবহার করুন:

usingItNow(myCallback);

নোড-স্টাইল ত্রুটি কনভেনশনগুলির প্রতি সম্মান সহ

কোস্টা জিজ্ঞাসা করলেন আমরা যদি নোড ত্রুটি কলব্যাক কনভেনশনকে সম্মান করি তবে এটি দেখতে কেমন হবে।

এই কনভেনশনে, কলব্যাকটি ত্রুটি হিসাবে কমপক্ষে একটি যুক্তি, প্রথম যুক্তি পাওয়ার প্রত্যাশা করা উচিত। প্রসঙ্গের উপর নির্ভর করে orচ্ছিকভাবে আমাদের এক বা একাধিক অতিরিক্ত যুক্তি থাকতে হবে। এই ক্ষেত্রে, প্রসঙ্গটি আমাদের উপরের উদাহরণ।

এই সম্মেলনে আমি আমাদের উদাহরণটি আবার লিখি।

var myCallback = function(err, data) {
  if (err) throw err; // Check for the error and throw if it exists.
  console.log('got data: '+data); // Otherwise proceed as usual.
};

var usingItNow = function(callback) {
  callback(null, 'get it?'); // I dont want to throw an error, so I pass null for the error argument
};

আমরা যদি কোনও ত্রুটির ক্ষেত্রে অনুকরণ করতে চাই তবে আমরা এটি ব্যবহার করে সংজ্ঞা দিতে পারি

var usingItNow = function(callback) {
  var myError = new Error('My custom error!');
  callback(myError, 'get it?'); // I send my error as the first argument.
};

চূড়ান্ত ব্যবহার ঠিক উপরের মতই:

usingItNow(myCallback);

আচরণের একমাত্র পার্থক্যটি আপনি যে সংস্করণটিকে usingItNowসংজ্ঞায়িত করেছেন তার উপর নির্ভর করবে : প্রথম আর্গুমেন্টের জন্য কলব্যাকটিতে "সত্যবাদী মান" (একটি ত্রুটিযুক্ত বস্তু) ফিড দেওয়া বা ত্রুটিযুক্ত যুক্তির জন্য যেটি এটি ফিড করে তোলে ।


সুতরাং এটি প্রথম পরামিতি কনভেনশন হিসাবে ত্রুটির সাথে দেখতে কেমন?
কোস্টা

113

একটি কলব্যাক ফাংশন হ'ল এমন একটি ফাংশন যা আপনি অন্য ফাংশনে প্রবেশ করেন যাতে সেই ফাংশনটি পরবর্তী সময়ে এটি কল করতে পারে। এই সাধারণত অ্যাসিঙ্ক্রোনাস দেখা যায় এপিআই এর ; এআইপি কলটি তত্ক্ষণাত রিটার্ন দেয় কারণ এটি অ্যাসিনক্রোনাস,

জাভাস্ক্রিপ্টে আমি যে সহজ উদাহরণটি ভাবতে পারি তা হ'ল 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

কলব্যাকস ছাড়াও, এপিআইয়ের আরও একটি জনপ্রিয় স্টাইল রয়েছে যা সাধারণত প্রতিশ্রুতি হিসাবে ব্যবহৃত হয়। আপনি তাদের সম্পর্কে পড়তে চান তাহলে তারপর আপনি সমগ্র ব্লগ পোস্টে আমি এই উত্তর ভিত্তিক লিখেছিলেন পড়তে পারেন এখানে


3
ধারণাটির যথেষ্ট বিস্তৃত এখনও সংক্ষিপ্ত বিতরণ; আমার মতো
নোড.জেএস

3
প্রচুর প্রসঙ্গ সরবরাহের জন্য +1। কলব্যাক ফাংশনগুলি কেবল দেখতে কী তা নয়, সেগুলি কী, কেন তারা ব্যবহৃত হয় এবং কেন সেগুলি অনেক বেশি ব্যবহৃত হয়। একটি শিক্ষানবিস সত্যিই সহায়ক।
আজুরস্পট 0

1
গ্রেট! এটি নিজেই কোনও পোস্ট হতে পারে!
পাবলো গ্লেজ

1
এটি , এবং এটি প্রতিশ্রুতি সম্পর্কে একটি দ্বিতীয় অংশ অন্তর্ভুক্ত ;)
শেভ

1
এটি গৃহীত উত্তরের চেয়ে অনেক বেশি ভাল ব্যাখ্যা! না শুধুমাত্র কোড একটি অংশ যা সমাধান সমস্যা, কিন্তু - আমি যে মত হতে তাই এখানে যে গৃহীত উত্তর ভালোবাসতাম কেন এবং কীভাবে এটা সমস্যা solves। মূলত, এই উত্তর এবং কলব্যাকেল আপনাকে কলব্যাক কী তা সম্পর্কে একটি সুন্দর দৃ understanding় ধারণা দেবে।
RusI

10

এখানে টেক্সট ফাইল কপি একটি উদাহরণ fs.readFileএবং fs.writeFile:

var fs = require('fs');

var copyFile = function(source, destination, next) {
  // we should read source file first
  fs.readFile(source, function(err, data) {
    if (err) return next(err); // error occurred
    // now we can write data to destination file
    fs.writeFile(destination, data, next);
  });
};

এবং এটি copyFileফাংশন ব্যবহারের একটি উদাহরণ :

copyFile('foo.txt', 'bar.txt', function(err) {
  if (err) {
    // either fs.readFile or fs.writeFile returned an error
    console.log(err.stack || err);
  } else {
    console.log('Success!');
  }
});

সাধারণ নোড.জেএস প্যাটার্নটি পরামর্শ দেয় যে কলব্যাক ফাংশনের প্রথম যুক্তিটি একটি ত্রুটি। আপনার এই প্যাটার্নটি ব্যবহার করা উচিত কারণ সমস্ত নিয়ন্ত্রণ প্রবাহের মডিউলগুলি তার উপর নির্ভর করে:

next(new Error('I cannot do it!')); // error

next(null, results); // no error occurred, return result

2
পরেরটা কি? পরিবর্তনশীল ফলাফলগুলি কী = তাকে কী বলা হচ্ছে?
যাযাবর কোডার

3
আমার সেইসাথে অন্যদের জন্য একটি পয়েন্টার @SemicolonWarrier stackoverflow.com/questions/5384526/javascript-node-js-next
kmonsoor

7

আপনি যেমন পড়তে পারেন তেমন এই উদাহরণটি ব্যবহার করে দেখুন, কেবল অ্যাপলিকেশনটি চালানোর জন্য newfile.js কপি সংরক্ষণ করুন নোড নিউফিলি করুন।

function myNew(next){
    console.log("Im the one who initates callback");
    next("nope", "success");
}


myNew(function(err, res){
    console.log("I got back from callback",err, res);
});

3

আমরা হিসাবে একটি সাধারণ ফাংশন তৈরি করছি

callBackFunction (data, function ( err, response ){
     console.log(response)
}) 

// callbackfunction 
function callBackFuntion (data, callback){
    //write your logic and return your result as
callback("",result) //if not error
callback(error, "") //if error
}

1
const fs = require('fs');

fs.stat('input.txt', function (err, stats) {
    if(err){
        console.log(err);
    } else {
        console.log(stats);
        console.log('Completed Reading File');
    }
});

'fs' একটি নোড মডিউল যা আপনাকে ফাইল পড়তে সহায়তা করে। কলব্যাক ফাংশন এটি নিশ্চিত করবে যে 'ইনপুট.টেক্সট' নামের আপনার ফাইলটি কার্যকর হওয়ার আগে পুরোপুরি পড়েছে read fs.stat () ফাংশন হ'ল ফাইলের আকার, ফাইল তৈরির তারিখ এবং পরিবর্তিত তারিখের মতো ফাইলের তথ্য পাওয়া get



0

callbackহ'ল একটি ফাংশন যা একটি Higher Order Function( উইকিপিডিয়া ) এর পরামিতি হিসাবে গৃহীত হয় । কলব্যাকের একটি সাধারণ বাস্তবায়ন হ'ল:

const func = callback => callback('Hello World!');

ফাংশনটি কল করার জন্য, সংজ্ঞায়িত ফাংশনটিকে যুক্তি হিসাবে অন্য ফাংশনটি সরান।

func(string => console.log(string));

0

এই ব্লগ পোস্টটি একটি ভাল লেখার আছে:

https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}

function alertFinished(){
  alert('Finished my homework');
}

doHomework('math', alertFinished);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.