W rzeczywistości twój kod będzie działał właściwie tak, jak jest, po prostu zadeklaruj swoje wywołanie zwrotne jako argument i możesz wywołać go bezpośrednio, używając nazwy argumentu.
Podstawy
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);
To zadzwoni doSomething, co zadzwoni foo, co ostrzeże „rzeczy idą tutaj”.
Zauważ, że bardzo ważne jest przekazanie funkcji referencji ( foo), zamiast wywoływania funkcji i przekazywania jej wyniku ( foo()). W swoim pytaniu robisz to poprawnie, ale warto to zaznaczyć, ponieważ jest to częsty błąd.
Bardziej zaawansowane rzeczy
Czasami chcesz zadzwonić do oddzwonienia, aby dostrzegła określoną wartość this. Możesz to łatwo zrobić za pomocą callfunkcji 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`
Możesz także przekazać argumenty:
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`
Czasami przydatne jest przekazanie argumentów, które mają zostać zwrócone jako tablica, a nie pojedynczo. Możesz użyć applydo tego:
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)połączenie musi być późniejfunction successzdefiniowane. W przeciwnym razie pojawi się błąd informujący, że funkcja nie jest zdefiniowana.