1. 程式人生 > >for迴圈中巢狀非同步請求問題

for迴圈中巢狀非同步請求問題

 先說解決辦法:用遞迴

//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次迴圈