我有一个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();
}
})
);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
.done期望传递一个函数。您传递的返回值$.getJSON不是函数。
考虑以下示例:
foo(bar())
Run Code Online (Sandbox Code Playgroud)
即使不知道任何有关foo或者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();
}
});
});
Run Code Online (Sandbox Code Playgroud)
话虽如此,由于.done也收到了网络响应,因此您无需将回调传递给$.getJSON。您可以这样写:
$.getJSON("/Home/CheckForMissingRecordsFromSupp").done(function(check1) {
$.getJSON("/Home/CheckForAddRecordsToAddFromDSS").done(function(check2) {
if (check1 || check2) {
location.reload();
}
});
});
Run Code Online (Sandbox Code Playgroud)