Aslında, kodunuz hemen hemen olduğu gibi çalışacaktır, sadece geri çağrınızı bir argüman olarak ilan edin ve doğrudan argüman adını kullanarak arayabilirsiniz.
Temeller
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);
Yani arayacak doSomething
arayacak olan foo
, "şeyler buraya gelecektir" uyaracaktır hangi.
İşlevi çağırmak ve sonucunu ( ) iletmek yerine, reference ( foo
) işlevini iletmenin çok önemli olduğunu unutmayın foo()
. Sorunuzda, düzgün bir şekilde yapıyorsunuz, ancak dikkat çekmeye değer çünkü bu yaygın bir hatadır.
Daha gelişmiş şeyler
Bazen geri aramayı aramak istersiniz, böylece belirli bir değer görür this
. Bunu JavaScript call
işleviyle kolayca yapabilirsiniz :
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`
Ayrıca argümanları iletebilirsiniz:
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`
Bazen geri çağırma vermek istediğiniz bağımsız değişkenleri tek tek değil, bir dizi olarak iletmek yararlı olabilir. Bunu apply
yapmak için kullanabilirsiniz :
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)
çağrı tanımlandıktan sonra olmalıdırfunction success
. Aksi takdirde, işlevin tanımlanmadığını bildiren bir hata alırsınız.