如何在Nodejs中以随机时间间隔创建随机对象?

时间:2012-11-12 19:25:48

标签: javascript node.js random callback

我想在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中实现这一点。

1 个答案:

答案 0 :(得分: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++;
}