javascriptでループ中にsleepしたい場合

いやー、一時間ほど悩んで解決しました
はじめこんな感じで実装したんですが
これだと処理が終わるまで、画面表示されずに
ただ固まった状態になっちゃうんですね(ブラウザによるのかな?)。。

for(var i=0;i<1000;++i){

	alert($i);
	sleep(1);
}

function sleep(t){ 

	var t1 = new Date().getTime(); 
	var t2 = new Date().getTime(); 
	
	while( t2 < t1 + 1000 * t ){
	
		t2 = new Date().getTime();
		
	}
	
	return; 
}


で、解決したのがこのコード


かばだんなさんが考えたコードで一発解決でした
http://blog.kabadna.com/20110719-1282/
かばだんなさん助かりました!ありがとうございます!!

// パラメータ
arr = [1,3,24,126,326];
// 実処理の実行
act();
 
function act() {
    // パラメータが無くなっていれば終了
    if(arr.length==0) return;
    // 配列の先頭を使う
    param = arr[0];
     
    //TODO: 何かの処理
    alert(param);
 
    // 処理済みのパラメータ削除
    arr.shift();
    // 次の回の実行予約
    setTimeout(function(){
        act();
    }, 4000);
    // これで1回の処理は終了
}