Na verdade, seu código funcionará como está, apenas declare seu retorno de chamada como argumento e você poderá chamá-lo diretamente usando o nome do argumento.
O básico
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);
Isso chamará doSomething
, o que chamará foo
, o que alertará "as coisas estão aqui".
Observe que é muito importante passar a referência de função ( foo
), em vez de chamar a função e passar seu resultado ( foo()
). Na sua pergunta, você faz isso corretamente, mas vale a pena destacar porque é um erro comum.
Coisas mais avançadas
Às vezes, você deseja chamar o retorno de chamada para que ele veja um valor específico para this
. Você pode fazer isso facilmente com a call
função 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`
Você também pode passar 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`
Às vezes, é útil passar os argumentos que você deseja fornecer ao retorno de chamada como uma matriz, em vez de individualmente. Você pode usar apply
para fazer isso:
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 chamada deve ser posterior àfunction success
definição. Caso contrário, você receberá um erro informando que a função não está definida.