Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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_Error Handling_Request_Cheerio - Fatal编程技术网

Javascript 处理循环数组请求错误的问题

Javascript 处理循环数组请求错误的问题,javascript,error-handling,request,cheerio,Javascript,Error Handling,Request,Cheerio,我用cheerio构建了一个数据刮板,从url数组中获取一些数据。它返回的url数组与我收集的数据的数组完全相同。我的输出数组的格式如下: [{url: urls, value: share}] 它工作正常,但无法处理错误: function getNbShares(urls) { return Promise.map(urls, request).map((htmlOnePage, index) => { const $ = cheerio.load(htmlO

我用cheerio构建了一个数据刮板,从url数组中获取一些数据。它返回的url数组与我收集的数据的数组完全相同。我的输出数组的格式如下:

[{url: urls, value: share}]
它工作正常,但无法处理错误:

function getNbShares(urls) {
    return Promise.map(urls, request).map((htmlOnePage, index) => {
        const $ = cheerio.load(htmlOnePage),
            share = $('.nb-shares').html();
        return {
            url: urls[index],
            value: share
        };
    });
}
所以我试着这样做,但不起作用:

function getNbShares(urls) {
    return Promise.map(urls, request).map((htmlOnePage, index) => {
        const $ = cheerio.load(htmlOnePage);
            if(error) {
              return  {
                    url: urls[index],
                    value: null }
            } else {
            share = $('.nb-shares').html();
              if (!share) {
                   return  {
                    url: urls[index],
                    value: null }
                  } else {
                      return {
                          url: urls[index],
                           value: share
                      };
                  }}
    });
}
其思想是,无论发生什么情况,它都会返回url,如果url没有应答或刮板不工作,则加上null值

我想我需要传递这样一个函数
函数(req,error)
,但我不知道具体在哪里…

尝试“捕获”错误


我尝试了类似这样的东西
.catch(函数(err){returnurl.splice(url[index],1);getNbShares(url);})但不起作用。我的想法是,我不仅需要捕获错误,还需要同时构建我的数组。Promise.reduce而不是.map如何?这样,如果有一个“错误”或值你不想放在数组中,你就不必了。实际上,我想把数组中的所有东西都作为一个对象。我只是不希望getNbShares(URL)在出现错误时停止。我的问题清楚还是应该重写?@SimonBreton-你能重写吗?还包括您想要的示例输出。
function getNbShares(urls) {
  return Promise.map(urls, request).map((htmlOnePage, index) => {
    const $ = cheerio.load(htmlOnePage),
        share = $('.nb-shares').html();
    return {
        url: urls[index],
        value: share
    };
  })
    .catch((error) => {
        //do something here with error
    })
}