문제

NodeJS 및 2 개의 모듈 요청 및 Cherio를 사용하여 웹 사이트를 긁어내는 간단한 웹 앱을 구축하려고합니다.

다음 코드로 수행 할 수 있습니다.

    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'));
            });

        }
    } )());
};
.

웹 사이트의 그림 URL을 인쇄하기 위해 잘 작동하지만 실제로 여기에서 수행하려는 것은 기능을 벗어날 수있는 URL 목록을 만드는 것입니다.나는 그것을 이렇게 시도했지만 빈 목록을 반환합니다.

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'));
                });

            }
        } )());
    };
.

어떻게 해결할 수 있습니까?많은 감사합니다

도움이 되었습니까?

해결책

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

var urlList=[];     
var printURL=function(url){
    request(url, (function() {
        return function(err, resp, body) {
            if (err)
                throw err;
            $ = cheerio.load(body);
            var images = $('img');
            var counter = images.length;
            images.each(function(){
                urlList.push($(this).attr('src'));
                counter--;
                if (counter==0) {
                    // now we have all images!!
                    console.log(urlList);
                }
            });

        }
    })());
};
.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top