2014-02-27 7 views
2

나는 nodejs와 그 2 개의 모듈 요청 및 cheerio를 사용하여 웹 사이트를 긁어 모으고있는 간단한 웹 앱을 만들려고합니다. URL 목록을 만들 그것은 웹 사이트하지만 난 정말 여기에서하려고에 사진의 URL을 인쇄 잘 작동노드가있는 웹 페이지를 긁어 모으는 URL을 반환

var printURL=function(url){ 
    request(url, (function() { 
     return function(err, resp, body) { 
      if (err) 
       throw err; 
      $ = cheerio.load(body); 

      $('img').each(function(){ 
       console.log($(this).attr('src')); 
      }); 

     } 
    })()); 
}; 

된다

나는 다음과 같은 코드로 할 관리 나는 그 기능의 외부에서 사용할 수 있습니다. 나는이 방법을 시도했지만 빈 목록을 반환

var urlList=[];  
var printURL=function(url){ 
     request(url, (function() { 
      return function(err, resp, body) { 
       if (err) 
        throw err; 
       $ = cheerio.load(body); 

       $('img').each(function(){ 
        urlList.push($(this).attr('src')); 
       }); 

      } 
     })()); 
    }; 

어떻게이 문제를 해결할 수 있습니까? 많은 감사

답변

3

모든 콜백이 완료 될 때까지 기다려야합니다.

이것은 비동기식 node.js의 일부입니다. 일이 더 복잡해지면 async과 같은 흐름 제어 라이브러리를 사용하는 것이 좋습니다.

+0

코드가 제대로 작동합니다. 그러나 나는 그것이 어떻게 작동 하는지를 확신 할 수 없다. 논리를 좀 더 자세히 안내해 주시겠습니까? 고마워요. – Spearfisher

+0

코드는 작성한 순서대로 실행되지 않습니다. 비동기 함수는 노드가해야 할 작업을 마칠 때 호출됩니다. 여기에 유용한 링크가 있습니다. http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js – TheHippo