返回使用nodejs抓取网页的url

我正在尝试构build一个简单的Web应用程序,使用nodejs及其2个模块请求和cheerio来抓取网站。

我设法用下面的代码来完成它:

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是正常的,但我真正想要做的是创build一个我可以在函数外部使用的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')); }); } } )()); }; 

我怎样才能解决这个问题? 非常感谢

你需要等到所有的callback完成。

 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的asynchronous特性的一部分。 如果事情变得更复杂,我会build议你使用像async一样的stream量控制库。