我遇到了这个问题,每当我从ECONNRESET
函数返回时,我总是得到then
。如果我console.log(d)
它会显示已废弃的html数据,但如果我return d;
,则会显示ECONNRESET
。
下面是代码块
function scrapCompanies(countriesLinks) {
return countriesLinks.map(function (countryLinks) {
return countryLinks.esomar_links.map(function (link) {
return Rq(link)
.then(function (data) {
var $ = cheerio.load(data),
companies_det = $('h2.mb0');
return companies_det.map(function (index,company_det) {
//var $ = cheerio.load(company_det);
var company_name = $(company_det).find('a').text(),
company_esomar_url = $(company_det).find('a').attr('href');
return Rq(company_esomar_url)
.then(function (web_data) {
var $ = cheerio.load(web_data);
return {
company_name: company_name,
company_url: $('a[data-ga-category="website"]').attr('href')
}
})
.catch(function (err) {
return err;
})
});
})
.catch(function (err) {
return err;
})
});
// return countryLinks.esomar_links.map(function (link) {
// var linkArr = link.split('/');
// var options = {
// baseUrl: 'https://'+linkArr[2],
// uri: linkArr[3],
// timeout: 180000
// };
// return Rq(options)
// .then(function (d) {
// return d;
// });
// });
})
}
这就是承诺呼叫被链接的方式:
var scraper = {
extract: function (dir) {
return landingPage(dir)
.then(function (countries) {
return Promise.all(navigateAndFetchPages(countries));
})
.then(function (countriesLinks) {
return Promise.all(scrapCompanies(countriesLinks));
})
.catch();
}
};
module.exports = scraper;
我正在使用Request Promise模块。 以下是如何在路线中访问:
app.get('/:directory/extract-email', function (req, res) {
scraper.extract(req.params.directory).then(function (data) {
res.send(data);
});
});