javascript - 执行函数的顺序

时间:2013-08-01 20:42:53

标签: javascript function

我在Document Ready上调用了一些javascript函数:

fogFields();
getLoS();
getShips();    

startGame();
getNextMove();

然而,就好像首先调用getNextMove()一样,最有可能的是它所做的只是ajax调用并提醒结果。所有其他函数都有更多的工作,因此,加载时发生的第一件事是getNextMove()警报,在后台你可以看到其他任何函数都没有完成它们的工作。直到我在警报窗口中单击“确定”,才会显示结果。我可以这样做,直到一个功能完成,下一个甚至不会开始。有些函数在完成之前调用它们自己的额外函数,并且按顺序工作,但我不能用整个代码执行...

3 个答案:

答案 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的情况。