等到循环迭代以可视方式完成,然后再进行下一个循环迭代
Waiting until for loop iteration to be completed visually before going onto next one
function start_map_one() {
for (var i = 0; i < 15; ++i) {
$.when(update_map()).then(evolve('W','W1',18,2,sea_limitations,20,350));
}
}
在这里,update_map(( 更新了一个div。但是,div 不是按顺序直观地更新 15 次,而是等到所有 15 次迭代完成,然后显示完成的div。
所以我理想地寻找这个顺序:
update_map(( 映射信息用于更新div - 用户 看到视觉结果...然后。。。
进化(( 地图信息 幕后更新
update_map(( 映射信息用于更新div - 用户 看到视觉结果...然后。。。
进化(( 地图信息 幕后更新
等等 15 次
考虑为此使用递归。在不太了解代码的作用的情况下,它可能看起来像这样......
function start_map_one() {
start_map_one_helper(15);
}
function start_map_one_helper(count) {
if (count <= 0) {
return;
}
$.when(update_map()).then(function () {
evolve('W','W1',18,2,sea_limitations,20,350);
start_map_one_helper(count - 1);
});
}
请注意,then()
回调需要包装在函数中,否则它会立即执行。
您可能需要将递归调用包装在 setTimeout 中才能在屏幕上查看更改...
function start_map_one() {
start_map_one_helper(15);
}
function start_map_one_helper(count) {
if (count <= 0) {
return;
}
$.when(update_map()).then(function () {
evolve('W','W1',18,2,sea_limitations,20,350);
setTimeout(function() {
start_map_one_helper(count - 1);
});
});
}
这是因为您没有给浏览器足够的时间来更改显示。只需在每次迭代的执行之间添加延迟即可。试试这个解决方案
function start_map_one() {
for (var i = 0; i < 15; ++i) {
setTimeout(function() {
$.when(update_map()).then(evolve('W','W1',18,2,sea_limitations,20,350));
}, i * 100);
}
}
将 100 更改为适合您的时间。
此外,您没有封装 evolve 函数(这意味着您在循环期间调用 evolve 而不是通过它调用它。只需将其包装在一个函数中即可。
相关文章:
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- 从两个基于0的for循环迭代器中获取单个基于0的索引的公式
- JavaScript循环迭代太多
- 在不同数据选项之间循环迭代对象
- 比许多使用JavaScript的循环迭代更有效的解决方案
- While为List值在CSS选择器中循环迭代
- 如何在ajax完成后执行第二次循环迭代
- 通过循环迭代追加文本
- Javascript使用for-in循环迭代器来设置变量
- 循环/迭代要返回的对象数组和字符串数组 - Javascript
- Javascript:我的数组的大小随着每次for循环迭代而减小.为什么
- Knockout foreach 循环迭代相同的数据元素
- 所有属性都设置为上次循环迭代值 [为什么?
- 每次循环迭代强制转换为不同的类型
- 在“for”循环迭代之间添加延迟
- 如何在循环迭代的每三分之一上做一些事情
- Nodejs服务器-通过使循环迭代异步来提高性能
- 使用嵌套的“”循环迭代流星中的集合;forEach”;
- JavaScript循环迭代中的POST之间需要延迟
- 如何在点击函数javascript中显示当前循环迭代