2013-05-04 3 views
1

콜백 함수에서 루프를 실행할 수 있습니까? (dowhile 등). 루프가 실행되는 동안node.js 콜백 함수에서 루핑

var execute = function (data,callback) 
{ 
    //do something with data 
    callback(); 
} 

execute (data,function(error,returnDataArray) 
{ 
    var boo = true; 
    while(boo) 
    { 
     //do something with returnDataArray 
     if (returnDataArray.length == 10) 
      boo=false; 
    } 
}); 

위까지 주요 Node.js를 스레드 대기를하지, 내 의심은 지금 : 다음은 샘플 코드는?

+0

노드가 대기하지 않는 이유는 무엇입니까? 루프가 너무 길면 타임 아웃이 발생할 수 있습니까? –

+0

예, 영원히 걸릴 경우 다른 프로세스를 기다릴 것입니다 ... – dandavis

+0

흠, 시도 해봤습니까? –

답변

0

는이

var execute = function (data,function(error,returnDataArray) 
{ 
    //do something with data 
    var boo = true; 
    while(boo) 
    { 
    //do something with returnDataArray 
    if (returnDataArray.length == 10) 
     boo=false; 
    } 
}); 

같은 뭔가를하거나

+0

+1 비동기 모듈 - 루프를 실행하지 마십시오. 맵/축소 또는 재귀를 시도하지만 루핑을 시도하지 마십시오. 그것이 당신을 위해 일할 것 인 것처럼 lok를지도로 만든다 – regretoverflow

+0

@ NikMartin : 당신이 제안 중의 1 개를 좋아하면 upvote 해주세요. – V31

+0

루프 안의 내용을 모른 채 "루프하지 마십시오"라고 말할 수는 없습니다. 루프는 노드에서 금지되지 않습니다. –

2

주 스레드가 콜백 함수 내부의 루프 발생하는에 의해 차단됩니다 async.parallel 기능을 사용하여 비동기 모듈을 사용할 수 있습니다. 이는 콜백 함수가 완료 될 때까지 지연되기 때문에 JavaScript 이벤트 루프에 푸시되고 스레드가 해제되면 실행됩니다. 간단히 말하면, 노드 (및 JavaScript)의 모든 것은 단일 스레드 (정상 실행, 콜백, 타임 아웃 등)에서 발생합니다.

JavaScript로 다른 스레드로 함수를 실행하는 유일한 방법은 다른 스레드로 수동으로 밀어 넣는 것입니다. 브라우저에서 웹 작업자가되고 노드에서는 클러스터가됩니다.