3

複数の遅延が格納されている配列があります:myArray[8000,4000,3000,6000,5000]setTimeout/setIntervalが各遅延を実行してから、特定のコードを実行する必要があります。したがって、たとえば:

myArray[0]=8000;
myArray[1]=4000;
myArray[2]=3000;
myArray[3]=6000;
myArray[4]=5000;

for(var k=0;k<5;k++)
{
    setTimeout(function() {

console.log("CODE TO BE EXECUTED");

    }, diffArray[k]);
}

したがって、最終結果は、コードの実行を12秒待機し、コードの実行を4秒待機し、コードの実行を3秒待機し、コードの実行を6秒待機し、コードを5秒待機してコードを実行します。現在のコードはそれらをすべて同時に実行します。

これはおそらく再帰で行う必要があることを私は知っています。私はそれを機能させるためにいくつかのことを試みましたが、運がありません。一方向で動作するようになりましたが、残念ながらUIスレッドがロックされ、実行中にUIで他のアクションを実行する必要があります。これに関する助けをいただければ幸いです。

4

3 に答える 3

4

setTimeoutを順番に実行します。すべてのsetTimeoutを同時に実行しています。

myArray[0]=8000;
myArray[1]=4000;
myArray[2]=3000;
myArray[3]=6000;
myArray[4]=5000;
var k =0;
    function repeat(){
       if(k == myArray.length) return;
      setTimeout(function() {
              repeat();
              console.log("CODE TO BE EXECUTED");

      }, myArray[k]);
     k++;
  }
于 2012-11-10T20:24:14.403 に答える
0

setTimeoutは非同期操作であるため、毎回k変数がコピーされるように、別の関数を作成する必要があります。

var func = function(k)
{
  setTimeout(function() {
    console.log("CODE TO BE EXECUTED");
    }, diffArray[k]);
}

for(var k=0;k<5;k++)
{
  func(k)
}
于 2012-11-10T20:23:20.777 に答える
0

12秒とおっしゃっていますが、それほど大きな値はありません。コードを8秒、12秒、15秒、21秒、および26秒で実行する場合は、次のようにします。

var delay =0;
for(var k=0;k<5;k++){
   delay+=myArray[k];
   setTimeout(function() {
      console.log("CODE TO BE EXECUTED");
   }, delay);
}
于 2012-11-10T22:23:51.540 に答える