我目前正在开展一个项目,并对javascript / nodejs / request / cheerio有一些疑问。
request(address , function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('iframe').each(function(i, element){
var a = $(this).attr('src');
});
} });
所以我上面的代码准确地从一些网站上抓取了我想要的数据。我希望它稍后在某个模板中呈现它。然而,似乎var只存在于上面的代码片段中,并且没有办法使它成为全局(不会介意)或以某种方式返回它。有任何想法吗?
答案 0 :(得分:1)
使用Promise可以帮助我们轻松提取并随后使用异步加载的数据。在下面的代码片段中,我将您的逻辑包装到一个函数中,该函数返回一个解析必要数据的Promise:
function iframes(url) {
return new Promise((resolve, reject) => {
request(url , function (error, response, html) {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html);
// Extract list of each iframe's src attribute
const sources = $('iframe').map((i, element) => {
return element.attribs['src'];
}).get();
// Resolve iframe sources
resolve(sources);
return;
}
// You can pass more error information here
reject('error loading url for iframe sources');
});
});
}
我们可以像这样使用这个函数:
iframes('http://www.w3schools.com/html/html_iframe.asp')
.then(srcs => {
// Can access the sources
console.log(srcs);
})
.catch(err => console.log(err));