Функция множественного обратного вызова JavaScript
Я пытался выяснить функцию функции обратного вызова в Javascript некоторое время без каких-либо успехов. Я, вероятно, перепутал код, однако я не получаю ошибок Javascript, поэтому я предположил, что синтаксис несколько правильный.
В принципе, я ищу функцию getDistanceWithLatLong() для завершения до начала updateDB(), а затем убедитесь, что она заканчивается до начала функции printList().
У меня есть работа с жестко запрограммированным вызовом "setTimeout" для функций, но я перекомпенсирую и заставляю пользователей ждать дольше без необходимости, если бы работа Callback работала.
Любые предложения? Ниже приведен код:
function runSearchInOrder(callback) {
getDistanceWithLatLong(function() {
updateDB(function() {
printList(callback);
});
});
}
Ответы
Ответ 1
Для этого вам необходимо передать следующий обратный вызов в каждую функцию.
function printList(callback) {
// do your printList work
console.log('printList is done');
callback();
}
function updateDB(callback) {
// do your updateDB work
console.log('updateDB is done');
callback()
}
function getDistanceWithLatLong(callback) {
// do your getDistanceWithLatLong work
console.log('getDistanceWithLatLong is done');
callback();
}
function runSearchInOrder(callback) {
getDistanceWithLatLong(function() {
updateDB(function() {
printList(callback);
});
});
}
runSearchInOrder(function(){console.log('finished')});
Этот код выводит:
getDistanceWithLatLong is done
updateDB is done
printList is done
finished
Ответ 2
не будет работать:
function callback(f1, f2) {
f1();
f2();
}
Что касается передаваемых аргументов, будьте творческими.
Ответ 3
В JavaScript все является объектом, включая функции. Вот почему вы можете передавать обратные вызовы в качестве параметров - вы передаете функцию, как если бы это был любой другой объект.
В каждом объявлении функции необходимо выполнить обратный вызов.
function runSearchInOrder(callback) {
...
callback();
}
function getDistanceWithLatLong(callback) {
...
callback();
}
function updateDB(callback) {
...
callback();
}
Затем ваш код, указанный выше, должен работать.