Синхронный запуск JS не по порядку

#javascript #json

#javascript #json

Вопрос:

У меня есть функция JavaScript, которая запускается не по порядку. Он запускает CheckForAddRecordsToAddFromDSS метод, затем if (check1 || check2) инструкцию, прежде чем даже запустить CheckForMissingRecordsFromSupp метод.

Почему это происходит?

 $.getJSON("/Home/CheckForMissingRecordsFromSupp", function (data) {
        check1 = data;
    }).done($.getJSON("/Home/CheckForAddRecordsToAddFromDSS", function (data) {
        check2 = data;
    }).done(function () {
    if (check1 || check2) {
                location.reload();
            }
    })
    );
  

Ответ №1:

Почему это происходит?

.done ожидает, что будет передана функция. Вы передаете возвращаемое значение $.getJSON , которое не является функцией.

Рассмотрим следующий пример:

 foo(bar())
  

Даже не зная ничего о foo or bar , мы определенно знаем, что это bar выполняется перед тем, как в foo передается возвращаемое значение bar и foo в, которое передается в,.

Ваш код должен быть:

 $.getJSON("/Home/CheckForMissingRecordsFromSupp", function(data) {
  check1 = data;
}).done(function() { // <- function
  $.getJSON("/Home/CheckForAddRecordsToAddFromDSS", function(data) {
    check2 = data;
  }).done(function() {
    if (check1 || check2) {
      location.reload();
    }
  });
});
  

Сказав это, поскольку .done также получает сетевой ответ, вам не нужно передавать обратный вызов $.getJSON . Вы можете просто написать:

 $.getJSON("/Home/CheckForMissingRecordsFromSupp").done(function(check1) {
  $.getJSON("/Home/CheckForAddRecordsToAddFromDSS").done(function(check2) {
    if (check1 || check2) {
      location.reload();
    }
  });
});