Javascript 总是在回报承诺的同时获得经济回报
我陷入了这个问题,每当我从Javascript 总是在回报承诺的同时获得经济回报,javascript,node.js,Javascript,Node.js,我陷入了这个问题,每当我从then函数返回时,我总是会得到一个ECONNRESET。如果我执行console.log(d)则显示废弃的html数据,但如果执行则返回d它始终显示ECONNRESET 下面是代码块,其中 function scrapCompanies(countriesLinks) { return countriesLinks.map(function (countryLinks) { return countryLinks.esomar_links.ma
then
函数返回时,我总是会得到一个ECONNRESET
。如果我执行console.log(d)
则显示废弃的html数据,但如果执行则返回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;
我正在使用请求-承诺模块。
以下是如何在路由中访问这些内容:
app.get('/:directory/extract-email', function (req, res) {
scraper.extract(req.params.directory).then(function (data) {
res.send(data);
});
});
不,我没有看到未定义的。。。我的映射实际上是从then
函数返回一个promise值。如果我停止执行return d
而不是使其成为console.log(d)
,则会执行连接并显示HTML数据,而如果返回,则连接会获得ESOCKETTIMEOUT
或ECONNRESET
我已使用真实的代码库更新了上述问题,基本问题保持不变。return
语句。。U使用console.log()
更改return
,它会将数据直接转储到console
中,但如果执行return
操作,则请求
甚至不会成功,从而导致econreset
或esocketimedout
错误。