वास्तव में, आपका कोड बहुत अधिक काम करेगा, बस अपने कॉलबैक को एक तर्क के रूप में घोषित करें और आप सीधे तर्क नाम का उपयोग करके इसे कॉल कर सकते हैं।
मूल बातें
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
, जो "सामान यहां जाता है" को अलर्ट करेगा।
ध्यान दें कि फ़ंक्शन को कॉल करने और इसके परिणाम ( ) को पारित करने के बजाय फ़ंक्शन संदर्भ ( 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
। अन्यथा, आपको यह बताने में त्रुटि होगी कि फ़ंक्शन परिभाषित नहीं है।