На самом деле, ваш код будет работать в основном как есть, просто объявите ваш обратный вызов в качестве аргумента, и вы можете вызвать его напрямую, используя имя аргумента.
Основы
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);
Это вызов doSomething, который вызовет foo, который предупредит "все идет сюда".
Обратите внимание, что очень важно передать функцию reference ( foo), а не вызывать функцию и передавать ее результат ( foo()). В своем вопросе вы делаете это правильно, но на это просто стоит обратить внимание, потому что это распространенная ошибка.
Более продвинутые вещи
Иногда вы хотите вызвать обратный вызов, чтобы он увидел конкретное значение для this. Вы можете легко сделать это с помощью callфункции 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`
Вы также можете передать аргументы:
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`
Иногда полезно передавать аргументы, которые вы хотите передать, в виде массива, а не по отдельности. Вы можете использовать applyдля этого:
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)вызов должен быть после того,function successкак определено. В противном случае вы получите сообщение о том, что функция не определена.