2016-07-22 3 views
1
나는이 특정 문제에 어려움을 겪고있어

:# 9 도전 - 당신의 노드 (비동기 콜백을) 알아

운동 9 - 저글링 비동기 당신은 각각 제공 한 전체 내용을 수집해야합니다

URL을 찾아서 콘솔에 출력하십시오 (stdout). 길이를 인쇄 할 필요는 없으며 데이터 만 String으로 인쇄 할 수 있습니다. URL 당 한 줄. 캐치 (catch)는 URL이 명령 줄 인수로 제공되는 것과 동일한 순서로 인쇄해야한다는 것입니다. -이 검색되는 URL의 순서로 출력됩니다 내가 잘못이다 알아낼 수 없습니다

var http = require('http'); 
 
var bl = require('bl') 
 
var results = []; 
 
var count = 0 
 

 
function getURLs() { 
 
    var urls = [] 
 
    for(var i = 2; i < process.argv.length; i++){ 
 
    urls.push(process.argv[i]); 
 
    } 
 
    return urls 
 
} 
 

 
function getHTTP(url){ 
 
    http.get(url, function(response){ 
 
    response.pipe(bl(function(err,data){ 
 
     if(err){return console.error(err)} 
 
     results[count] = data.toString(); 
 
     count ++; 
 
     if (count === process.argv.length - 2){ 
 
     printAll() 
 
     } 
 
    })) 
 
    }) 
 
} 
 

 
function printAll(){ 
 
    for(var i = 0 ; i < results.length; i++){ 
 
    console.log(results[i]) 
 
    } 
 
} 
 

 
function start(){ 
 
    retrivedURL = getURLs() 
 
    for(var i = 0; i < retrivedURL.length; i++){ 
 
    getHTTP(retrivedURL[i]) 
 
    } 
 
} 
 

 
start()

:

여기 내 코드입니다.

+1

루프 및 비동기 함수를 사용할 수없고 순서를 유지해야하므로 비동기 호출을 순서대로 정렬해야합니다. 연속 전달 스타일의 한 가지 방법은 루프 대신 재귀를 사용하는 것입니다. 또 다른 옵션은 약속을 사용하여 시퀀스하는 것입니다. – elclanrs

답변

1

이 목적으로 async.eachSeries를 사용할 수 있습니다. 즉,이 URL은 비동기로 호출 할 수 있습니다. 잘 설명되어 있습니다 here.

관련 문제