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变化。这解释了为什么您的代码每次都使用相同的值。解决这个问题很简单 - 只需将定义移动到创建新对象的函数范围内,如下所示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++;
}
于 2012-11-12T19:58:15.880 回答