Javascript 处理循环数组请求错误的问题
我用cheerio构建了一个数据刮板,从url数组中获取一些数据。它返回的url数组与我收集的数据的数组完全相同。我的输出数组的格式如下: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
[{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
})
}