আসলে, আপনার কোডটি ঠিক তেমন কাজ করবে, কেবল আপনার কলব্যাকটিকে একটি আর্গুমেন্ট হিসাবে ঘোষণা করুন এবং আপনি যুক্তির নাম ব্যবহার করে সরাসরি কল করতে পারেন।
অধিকার
function doSomething(callback) {
// ...
// Call the callback
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}
doSomething(foo);
এটি কল করবে doSomething, যা কল করবে foo, যা "জিনিস এখানে চলে যায়" সতর্ক করবে will
মনে রাখবেন যে ফাংশনটি কল করা এবং এর ফলাফলটি ( ) পাস করার পরিবর্তে ফাংশন রেফারেন্স ( foo) পাস করা খুব গুরুত্বপূর্ণ foo()। আপনার প্রশ্নে, আপনি এটি সঠিকভাবে করেন তবে এটি নির্দিষ্ট করে দেখানো ঠিক কারণ এটি একটি সাধারণ ত্রুটি।
আরও উন্নত জিনিস
কখনও কখনও আপনি কলব্যাক কল করতে চান যাতে এটির জন্য একটি নির্দিষ্ট মান দেখতে পাওয়া যায় this। আপনি সহজেই জাভাস্ক্রিপ্ট callফাংশন দিয়ে এটি করতে পারেন :
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.call(this);
}
function foo() {
alert(this.name);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Joe" via `foo`
আপনি যুক্তিগুলিও পাস করতে পারেন:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback, salutation) {
// Call our callback, but using our own instance as the context
callback.call(this, salutation);
}
function foo(salutation) {
alert(salutation + " " + this.name);
}
var t = new Thing('Joe');
t.doSomething(foo, 'Hi'); // Alerts "Hi Joe" via `foo`
কখনও কখনও আপনি ব্যক্তিগতভাবে না হয়ে অ্যারে হিসাবে কলব্যাক দিতে চান এমন আর্গুমেন্টগুলি পাস করার জন্য এটি দরকারী। আপনি এটি করতে ব্যবহার করতে পারেন apply:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.apply(this, ['Hi', 3, 2, 1]);
}
function foo(salutation, three, two, one) {
alert(salutation + " " + this.name + " - " + three + " " + two + " " + one);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Hi Joe - 3 2 1" via `foo`
object.LoadData(success)কল অবশ্যই সংজ্ঞায়িত হওয়ার পরে হওয়া উচিতfunction success। অন্যথায়, আপনি ফাংশন সংজ্ঞায়িত না বলে আপনাকে একটি ত্রুটি পাবেন।