我试图在节点上编写一些解析器。我在这里无法理解。 如果之前的结果有误,我需要停止请求下一页。 我目前的代码是这样的:
var request = require('request');
var cheerio = require('cheerio');
var links = ['http://link1','http://link2','http://link3'];
for(l in links) {
var link = links[l];
request(link, function(err, page) {
if(err) throw err;
$ = cheerio.load(page.body);
if($('a').length < 2) {
// here i need to stop requesting next url(s) from links array somehow!
// (if this is the case of link1 then link2 and link3 will not request)
} else {
// do something...
}
$.html();
});
}
答案 0 :(得分:0)
Node.js是一种异步语言,因此您无法在break;
等原生javascript中停止它,因此您可能会尝试使用async
module,如下所示:
var request = require('request');
var cheerio = require('cheerio');
var links = ['http://link1', 'http://link2', 'http://link3'];
var async = require('async');
async.eachSeries(links, function(link, callback) {
request(link, function(err, page) {
if (err) {
callback(err);
return;
}
$ = cheerio.load(page.body);
if ($('a').length < 2) {
// here i need to stop requesting next url(s) from links array somehow!
// (if this is the case of link1 then link2 and link3 will not request)
callback(err);
return;
} else {
// do something...
}
$.html();
callback();
});
}, function(err) {
if (err) {
//do something id some of the links throws err
return;
}
//do womething if every request was success
});
上面的代码将为数组中的每个元素(链接)运行一个函数,如果其中一个链接将错误地调用callback
,它将立即停止迭代并将调用带有错误的回调函数。否则,如果所有元素都将调用callback
而没有任何参数,则将调用回调函数而不使用任何参数。
请查看async
个文档,了解可能以其他方式为您提供帮助的其他选项。