我在Document Ready上调用了一些javascript函数:
fogFields();
getLoS();
getShips();
startGame();
getNextMove();
然而,就好像首先调用getNextMove()一样,最有可能的是它所做的只是ajax调用并提醒结果。所有其他函数都有更多的工作,因此,加载时发生的第一件事是getNextMove()警报,在后台你可以看到其他任何函数都没有完成它们的工作。直到我在警报窗口中单击“确定”,才会显示结果。我可以这样做,直到一个功能完成,下一个甚至不会开始。有些函数在完成之前调用它们自己的额外函数,并且按顺序工作,但我不能用整个代码执行...
答案 0 :(得分:3)
鉴于您的问题中的代码,在getNextMove
退出之前无法调用startGame
,无论其内容如何。
在<{em> startGame
内异步调度(通过超时,AJAX回调等)的函数可能在调用{{1}之前或之后的任何时间完成但是这是一个单独的问题。要解决该问题,我们需要了解有关函数内容的更多信息。
答案 1 :(得分:0)
如果其他函数中有一个AJAX调用,那么这些AJAX调用肯定会采用一个回调参数,这是一个在AJAX调用已经完成时执行的函数。现在,如果你想以某种方式执行你的函数,那么当前一个函数的AJAX调用完成时,一个函数就会启动,你可以为你自己的函数添加一个额外的回调参数,然后将其传递给AJAX调用。这应该说明我的意思:
function logFields(callback) {
ajaxCall(callback);
}
function getLoS(callback) {
ajaxCall(callback);
}
function getShips(callback) {
ajaxCall(callback);
}
function startGame(callback) {
ajaxCall(callback);
}
function getNextMove() {
}
fogFields(function(){
getLoS(function(){
getShips(function(){
startGame(function(){
getNextMove();
});
});
});
});
答案 2 :(得分:0)
如果你的所有函数都使用ajax调用,那么只需使用promises。 只需返回它,例如:
function fogFields(){
return $.ajax();
};
然后只使用.then:
fogFields().then(getLos());
如果您使用它,请在jquery doc page上提供有关被保护对象的更多信息。
或者在纯JavaScript中实现,您可以找到here和更多理论here
或其他选项,我不建议你在$ .ajax调用async
中设置false
param。再次,这是你使用jQuery的情况。