for迴圈中巢狀非同步請求問題
阿新 • • 發佈:2019-01-30
先說解決辦法:用遞迴
//for中巢狀非同步時,執行順序會混亂
function forTest(){
for(var i=0; i<10; i++){
(function(j){
setTimeout(function(){
console.log("第"+(j+1)+"次迴圈");
}, Math.random() * 3000);
}(i));
}
}
forTest();
//第5次迴圈
//第10次迴圈
//第2次迴圈
//第3次迴圈
//第7次迴圈
//第9次迴圈
//第8次迴圈
//第6次迴圈
//第4次迴圈
//第1次迴圈
//用遞迴代替for迴圈,可以保證正常執行順序 function recurTest(j, length){ setTimeout(function(){ console.log("第"+(j+1)+"次迴圈"); if(++j < length){ recurTest(j, length); } }, Math.random() * 3000); } recurTest(0, 10); //第1次迴圈 //第2次迴圈 //第3次迴圈 //第4次迴圈 //第5次迴圈 //第6次迴圈 //第7次迴圈 //第8次迴圈 //第9次迴圈 //第10次迴圈