执行功能的顺序

Order of executing functions

本文关键字:顺序 功能 执行      更新时间:2023-09-26

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

fogFields();
getLoS();
getShips();    
startGame();
getNextMove();

然而,似乎首先调用getNextMove(),因为它所做的很可能只是一个ajax调用并提醒结果。所有其他函数都有更多的工作,因此,加载时发生的第一件事是getNextMove()警报,在后台您可以看到其他函数都没有完成它们的工作。在我单击警报窗口上的"确定"之前,不会显示任何结果。我可以这样做吗?在一个函数结束之前,下一个函数甚至不会开始。有些函数在完成之前调用了自己的额外函数,这是按顺序进行的,但我无法对整个代码进行调用。。。

考虑到问题中的代码,在startGame退出之前,不可能调用对getNextMove的调用,无论其内容如何。

确实,在startGame内异步调度(通过超时、AJAX回调等)的函数在调用getNextMove之前或之后的任何时间都会完成,但这是一个单独的问题。为了解决这个问题,我们需要更多地了解函数的内容。

如果其他函数中有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();
            });
        });
    });
});

如果所有函数都使用ajax调用,那么只需使用promise。只需返回即可,例如:

function fogFields(){
    return $.ajax();
};

然后使用。然后:

fogFields().then(getLos());

如果您使用jquerydoc页面,可以在该页面上查看有关deffered对象的更多信息。或者在纯javascript中实现,您可以在这里找到更多理论
或者另一个选项,我不建议您将$.ajax调用中的async参数设置为false。同样,这是针对您使用jQuery的情况