NodeJSを使用してWebページを削り取るURLを返します
-
23-12-2019 - |
質問
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の非同期性の一部です。物事がより複雑な場合は、非同期。
のようなフローコントロールライブラリを使用することをお勧めします。所属していません StackOverflow