質問

NodeJSとその2つのモジュール要求とCheerioを使用してWebサイトを削除しようとしています。

次のコードで管理することを管理します。

    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