Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 总是在回报承诺的同时获得经济回报_Javascript_Node.js - Fatal编程技术网

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
错误。