JS同步未按顺序触发

时间:2019-03-28 18:28:21

标签: javascript json

我有一个JavaScript函数,没有按顺序触发。它先触发 if (totalYear > 0) { 方法,然后触发CheckForAddRecordsToAddFromDSS语句,甚至触发if (check1 || check2)方法。

为什么会这样?

CheckForMissingRecordsFromSupp

1 个答案:

答案 0 :(得分:5)

  

为什么会这样?

.done希望传递一个函数。您正在传递$.getJSON的返回值,它不是一个函数。

考虑以下示例:

foo(bar())

即使不了解foobar,我们也肯定知道bar是在之前 foobar之前执行的的返回值传递到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();
    }
  });
});