执行功能的顺序
Order of executing functions
我在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的情况
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 按顺序添加和删除类
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 滚动功能按相反顺序工作
- 表单提交时,点击顺序功能并提交
- 使用功能顺序吊装
- 功能无法按ios5 iPad的正确顺序工作
- 执行功能的顺序
- jQuery脚本的顺序正确吗?隐藏/显示功能在实时版本中不起作用,但可以作为独立Fiddle使用
- 你能有效地重置功能输入顺序吗
- 什么时候功能顺序很重要
- 如何按顺序向各种按钮添加功能