2012-11-12 87 views
0

我想在NodeJS中創建X個隨機對象(本例中爲100個)。這些對象具有隨機值,我想讓它們在randomIntervals中創建。爲了做到這一點,我寫的代碼類同此:如何在Nodejs中以隨機時間間隔創建隨機對象?

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中完成此操作。

+0

精確副本[setTimeout的在一個for循環並通過i設定爲值] (http://stackoverflow.com/questions/5226285/settimeout-in-a-for-loop-and-pass-i-as-value)等等。 – Bergi

+0

爲什麼不在超時內創建隨機值?這就像你現在一起創建100個對象,然後隨機產生它們 – Bergi

+0

這可能會工作Bergi,實際上隨機函數進入超時,但我試圖避免代碼混亂。 – user1500053

回答

1

原始代碼將100個回調放入事件隊列中。然後,每執行一次,它將使用存儲在randomNum1randomNum2中的值。注意,當第一個回調開始運行時,while循環已經完成,並且randomNum1randomNum2的值不再更改。這就解釋了爲什麼你的代碼每次都使用相同的值。對此的解決方法是容易 - 只需移動定義爲randomNum1randomNum2函數創建了以下這樣的新對象的範圍內:

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++; 
} 
+0

您誤解;我並不需要一個隨機值的對象。我有一個對象,其中的值是重要的,但爲了測試,我想創建具有隨機值的對象的實際值。 – user1500053

+0

我沒有定義一個新的構造函數,我只是用正確的作用域值來調用你的'SomeObject'構造函數。如果那不是你想要的,你可能應該改變你的問題。 –