0

NodeJS で X 個のランダム オブジェクト (この例では 100 個) を作成したいと考えています。これらのオブジェクトにはランダムな値があり、randomIntervals で作成する必要があります。これを達成するために、私はこれに似たコードを書きました:

i=0;

while (i < 100){
 randomNum1 = Math.floor(Math.random()*100);
 randomNum2 = Math.floor(Math.random()*100);
 randomIntervalTime = Math.floor(Math.random()*100);

 timeOutInterval = setTimeout(function(){
   return new SomeObject(randomNum1, randomNum2)}, randomIntervalTime);
 i++;
}

問題は、コールバックの値が保持されず、すべて同じ値 (ループで作成された最後の値) を持つ 100 個の新しいオブジェクトが生成されることです。

これは、完全には把握していないコールバックの動作方法の問題によるものだと認識していますが、私の質問は、誰かが Nodejs でこれをどのように達成するかということです。

4

1 に答える 1

1

元のコードは、100 個のコールバックをイベント キューに配置します。次に、それぞれが実行されると、 と に格納されている値が使用されrandomNum1ますrandomNum2。最初のコールバックが実行を開始したとき、while ループはすでに完了しており、 と の値は変更されていないことに注意してrandomNum1くださいrandomNum2。これは、コードが毎回同じ値を使用する理由を説明しています。これを修正するのは簡単です。次のように、新しいオブジェクトを作成する関数のスコープ内で定義randomNum1を移動するだけです。randomNum2

var createNewObject = function() {
  var randomNum1 = Math.floor(Math.random()*100);
  var randomNum2 = Math.floor(Math.random()*100);
  return new SomeObject(randomNum1, randomNum2);
};

var i = 0;

while (i < 100) {
  var randomIntervalTime = Math.floor(Math.random()*100);
  setTimeout(createNewObject, randomIntervalTime);
  i++;
}
于 2012-11-12T19:58:15.880 に答える