En realidad, su código funcionará tal cual, simplemente declare su devolución de llamada como argumento y puede llamarlo directamente usando el nombre del argumento.
Los basicos
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);
Eso llamará doSomething
, lo que llamará foo
, lo que alertará "las cosas van aquí".
Tenga en cuenta que es muy importante pasar la referencia de función ( foo
), en lugar de llamar a la función y pasar su resultado ( foo()
). En su pregunta, lo hace correctamente, pero vale la pena señalarlo porque es un error común.
Cosas más avanzadas
A veces desea llamar a la devolución de llamada para que vea un valor específico para this
. Puede hacerlo fácilmente con la call
función de 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`
También puedes pasar argumentos:
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`
A veces es útil pasar los argumentos que desea dar la devolución de llamada como una matriz, en lugar de individualmente. Puedes usar apply
para hacer eso:
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)
la llamada debe ser posterior a lafunction success
definición. De lo contrario, recibirá un error que le indicará que la función no está definida.