【问题标题】:How do you create random objects at random time intervals in Nodejs?如何在 Nodejs 中以随机时间间隔创建随机对象?
【发布时间】:2012-11-12 19:25:47
【问题描述】:

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

【问题讨论】:

标签: javascript node.js random callback


【解决方案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++;
}

【讨论】:

  • 你误会了;我并不真正想要一个具有随机值的对象。我有一个对象,其中这些值很重要,但为了测试,我想为它的真实值创建具有随机值的对象。
  • 我没有定义新的构造函数,我只是用适当范围的值调用了您的 SomeObject 构造函数。如果这不是您想要的,您可能应该重新表述您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2022-12-04
相关资源
最近更新 更多