Функция множественного обратного вызова 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();
}

Затем ваш код, указанный выше, должен работать.