【发布时间】:2016-12-12 11:14:11
【问题描述】:
我想从网站中保存一些资源,这些资源与许多页面分开,所以我必须逐页发送请求。页面超过 1000+,我使用async.eachSeries 来稳定流量。但有时,请求模块没有发送响应,因此程序停止运行。
下面是代码,
var pages = [1, 2, 3, 4, 5, 6, .... , 200];
async.eachSeries(pages, function (page, callback) {
getData(page, function(){
console.log('Data saved . page : ' + page);
callback();
});
}, function () {
console.log('All done !');
});
function getData(page, callback) {
//request data
var url = "http://finance.naver.com/item/frgn.nhn?code=191420&page="+page;
request(url, function (err, res, html) {
if (!err && res.statusCode == 200) {
var $ = cheerio.load(html);
var data = $.html();
// save to mongoDB
new Data({
data: data,
}).save(function (err, result) {
if (err) console.log('Error !');
// callback here, to async.eachSeries() knows;
callback();
});
}
})
}
控制台
Data saved. page : 1
Data saved. page : 2
Data saved. page : 3
Data saved. page : 4
Data saved. page : 5
Data saved. page : 6 (stopped here with no progress, sometimes)
大部分尝试都是成功的,但有时程序会停止。没有反应怎么办?有没有办法放弃请求并重试?
【问题讨论】:
-
您需要处理错误并实现超时。无论哪种方式,您都必须决定重试该页面多少次,还是跳过它继续。
标签: node.js asynchronous request