循环数组请求的问题处理错误
Problem Handling error over loop array request
我用 cheerio 构建了一个数据 scraper,以从 url 的数组中获取一些数据。它 return 我 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
};
}}
});
}
这个想法是,无论发生什么,它总是 return 我 url,如果 url 没有回答或者 则加上值为 null抓取器 不起作用。
我想我需要传递这样的函数 function(req,error)
但我不知道具体在哪里...
尝试"catch"错误? Promise Catch Docs
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
})
}
我用 cheerio 构建了一个数据 scraper,以从 url 的数组中获取一些数据。它 return 我 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
};
}}
});
}
这个想法是,无论发生什么,它总是 return 我 url,如果 url 没有回答或者 则加上值为 null抓取器 不起作用。
我想我需要传递这样的函数 function(req,error)
但我不知道具体在哪里...
尝试"catch"错误? Promise Catch Docs
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
})
}