這是一個後續問題:How to suspend JavaScript to allow render的Javascript嵌套循環使用的setTimeout
我寫了,做了那種暫停循環功能(允許與渲染):
function loop(count, callback){
var counter = 0
var iteration = function(){
callback(counter)
counter ++;
if (counter < count){
setTimeout(iteration, 0)
}
}
iteration();
}
這很好用,例如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...
我的使用情況是,我運行了一些仿真的,每個都包括多個步驟,我想呈現在每個之間。我是否以這種錯誤的方式去做?
你可以看看[這個答案](http://stackoverflow.com/questions/15963590/how-to-synch- javascript-callbacks/15964626#15964626),其中還討論了同步異步代碼。 –
如果你想在循環之後執行某些事情,可以使用類似'function loop(count,callback,callback_finish){if(counter
Passerby
_「,我想在每個之間渲染」_爲什麼需要超時0? – Simon