2017-05-25 9 views
-1

3つの関数を順番に実行したいとします。それぞれの関数の間で1秒間待ってから、最初の関数をforループの変数を引数として取ります。このようなもの:遅延のあるforループで3つの固有関数を実行する

for (var i=0; i<5; i++) { 
    setTimeout(function(){ 
     one(i); 
    },1000); 
    setTimeout(function(){ 
     two(); 
    },2000); 
    setTimeout(function(){ 
     three(); 
    },3000); 
} 

私はこれを試してもうまくいかないようです。これをどうすれば解決できますか?

+0

一つのアプローチであなたの目標を達成することができ、 '2()'タイムアウトで関数 '1()'内のタイムアウト、関数 '3()'とから関数 'two()'の中から。 –

答えて

1

setTimeout()ので、あなたの関数が3秒後、2秒とthree() 5回の後、1秒後にtwo() 5回one() 5回実行されます、将来的に機能を実行するためにタイマーを設定しますが、すぐに戻ります。

あなたは機能を呼び出すことであろう

for (var i=0; i<5; i++) { 
    setTimeout(function(){ 
     one(i); 
    },(i * 3 + 1) * 1000); 
    setTimeout(function(){ 
     two(); 
    },(i * 3 + 2) * 1000); 
    setTimeout(function(){ 
     three(); 
    },(i * 3 + 3) * 1000); 
} 
+0

これは完璧に動作します!あなたが私がそれをよりよく理解できるように間隔を設定する方法を私に説明できますか?ありがとうございました – user3385777

+1

すべてのイベントはすぐに設定されるので、すべてのイベントは開始時刻に関連しています。 msを秒に変換している '* 1000'を無視すると、to(i * 3)(すなわち、5ループごとに3秒)と関数の1,2または3秒1()、2()、3() – mykel

関連する問題