Насправді, ваш код буде спрацьовувати так само, як є, просто оголосіть зворотний дзвінок як аргумент, і ви можете викликати його безпосередньо, використовуючи ім'я аргументу.
Основи
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, що сповістить "речі йдуть сюди".
Зауважте, що дуже важливо передавати функцію посилання ( 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як визначено. В іншому випадку ви отримаєте помилку про те, що функція не визначена.