En fait, votre code fonctionnera à peu près tel quel, déclarez simplement votre rappel comme argument et vous pouvez l'appeler directement en utilisant le nom de l'argument.
Les bases
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);
Cela appellera doSomething, qui appellera foo, qui alertera "les choses vont ici".
Notez qu'il est très important de passer la fonction reference ( foo), plutôt que d'appeler la fonction et de passer son résultat ( foo()). Dans votre question, vous le faites correctement, mais cela vaut la peine d'être souligné car c'est une erreur courante.
Des trucs plus avancés
Parfois, vous souhaitez appeler le rappel pour qu'il voit une valeur spécifique pour this. Vous pouvez facilement le faire avec la callfonction JavaScript :
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`
Vous pouvez également passer des arguments:
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`
Parfois, il est utile de passer les arguments que vous souhaitez donner au rappel sous forme de tableau, plutôt qu'individuellement. Vous pouvez utiliser applypour cela:
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)l'appel doit être aprèsfunction successest défini. Sinon, vous obtiendrez une erreur vous indiquant que la fonction n'est pas définie.