Question

J'essaie de créer une application Web simple raclant un site Web à l'aide de Nodejs et de sa demande de 2 modules et de Cheerio.

Je réussis à le faire avec le code suivant:

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

        }
    } )());
};

Cela fonctionne bien pour imprimer l'URL des images sur le site Web, mais ce que j'essaie vraiment de faire ici est de créer une liste d'URL que je pourrais utiliser en dehors de la fonction.Je l'ai essayé de cette façon, mais cela renvoie une liste vide:

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

            }
        } )());
    };

Comment puis-je résoudre ce problème?Merci beaucoup

Était-ce utile?

La solution

Vous devez attendre jusqu'à ce que tous les rappels soient terminés.

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

        }
    })());
};

Cela fait partie de la nature asynchrone du nœud.js.Si les choses deviennent plus compliquées, je vous recommanderais d'utiliser une bibliothèque de contrôle de flux comme async .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top