2012-11-12 5 views
0

NodeJS에 X 개의 랜덤 오브젝트 (이 예제에서는 100 개)를 생성하려고합니다. 이 객체들은 난수 값을 가지고 있으며 randomInterval에서 생성되기를 원합니다. 이를 위해 나는이에 비슷한 코드를 작성 :노드 j에서 임의의 시간 간격으로 임의의 오브젝트를 어떻게 만듭니 까?

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

정확한 복제 [A에 대한 루프에서의 setTimeout 및 값 I를 통과] (http://stackoverflow.com/questions/5226285/settimeout-in-a-for-loop-and-pass-i-asvalue) 및 기타 여러 가지가 있습니다. – 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' 생성자를 호출했습니다. 그것이 당신이 원하는 것이 아니라면, 당신은 아마도 당신의 질문을 다시 말해야 할 것입니다. –

관련 문제