我想在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中实现这一点。
答案 0 :(得分: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++;
}