2012-12-23 7 views
0

Node.js의 비동기 이벤트에 어려움을 겪고 있습니다.여러 비동기 http get 요청

내 앱이 첫 번째 HTTP GET 요청을 한 다음 응답 본문에있는 일부 정보를 기반으로 일정 시간 반복됩니다.

각 반복에서 다른 HTTP GET 요청을 보내고 요소 배열에 푸시 된 결과를 반환하는 함수를 호출합니다.

내 문제는 모든 http 요청이 완료되었을 때 console.log() 요소 배열을 원한다는 것입니다. 여기 내 코드 :

http.get('mysite.com', function(res) { 
    var body = ''; 
    res.on('data', function(chunk) { 
     body += chunk; 
    }); 
    res.on('end', function() { 
     var last = 5, 
      elements = []; 
     for(var i=0; i < last; i++) { 
      elements.push(myRequest(i)); 
     } 
     console.log(elements); 
     // Do some stuff with the elements array after it has been populated 
    }); 
}).on('error', function(error) { 
    console.log(error); 
}); 

var myRequest = function(i) { 
    http.get('mysite.com/page' + i, function(res) { 
     var body = ''; 
     res.on('data', function(chunk) { 
      body += chunk; 
     }); 
     res.on('end', function() { 
      // Do parsing here 
      return parsed; 
     }); 
    }).on('error', function(error) { 
     console.log(error); 
    }); 
}; 

비동기 모듈을 사용하는 것에 대해 생각했지만이 사용 사례에서 어떻게 사용하는지 모르겠습니다.

미리 감사드립니다.

+0

http get은 정의에 따라 비동기 적입니다. 당신이하고 싶은 것을 정말로 보지 마세요. – asgoth

+0

끝나면 모든 http 요청의 결과로 무언가를하고 싶습니다. –

답변

2

비동기 라이브러리를 사용하고 대기열을 사용할 수 있습니다. 하지만 아래에서 아무 것도 테스트하지 않고 손으로 직접 해보고 싶다면 가장 깨끗한 방법이라고 확신하지는 못하지만 아이디어를 줄 수도 있습니다.

귀하의 요청 기능에 콜백을 전달합니다
var myRequest = function(i, cb){ 
    ... 
    res.on('end', function(){ 
     cb(parsed); 
    }); 
} 

와 잠시 멈출 통화 위의

더 같을 것이다 :

var last = 5, elements = []; 

var rep = function(i){ 
    if(i < last){ 
    myRequest(i, function(result){ 
     elements.push(result);    
     rep(i+1); 
    }); 
    } else { 
    console.log(elements); 
    // Do some stuff with the elements array after it has been populated 
    } 
} 

res.on('end', function() { 
    rep(0); 
}); 

찾고 좋네요 많이 나올 것 비동기를 사용하여. 그래도 지금 실행 해 ...

+0

흠, 작동하지 않는 것 같습니다. 응용 프로그램이 그냥 멈추고 아무것도/아무것도 인쇄하지 않습니다. –

+0

내가 볼 수 있듯이 첫 번째 http.get 요청의 "end"이벤트는 절대로 실행되지 않습니다. –

+0

일부 범위가 수정되었으며 현재 작동합니다! 고맙습니다. –