这是一个后续问题:如何暂停 JavaScript 以允许渲染
我写了一个函数来执行一种暂停的for循环(允许在两者之间进行渲染):
function loop(count, callback){
var counter = 0
var iteration = function(){
callback(counter)
counter ++;
if (counter < count){
setTimeout(iteration, 0)
}
}
iteration();
}
这很好用,使用 eg loop(100, function(i){ console.log(i) } )
。并允许浏览器在每次迭代之间进行渲染。
但是,在循环之后执行内容时会出现问题,因为不能保证循环已经完成。实际上,我认为可以保证它没有(因为在第一次调用 setTimeout 后主线程继续)。嵌套这些循环时会加剧这种情况:
loop(10, function(i){
loop(10, function(j){
console.log(i + '-' + j)
})
})
/// This definitely does not output the numbers in order...
我的用例是我正在运行多个模拟,每个模拟都包含多个步骤,并且我想在每个模拟之间进行渲染。我会以错误的方式解决这个问题吗?