Node.js 如果先前的结果错误,则中断请求函数
我正在尝试在节点上编写一些解析器。我不明白这里有什么。 我需要停止要求下一页,如果以前的结果是错误的。 我当前的代码是这样的:Node.js 如果先前的结果错误,则中断请求函数,node.js,Node.js,我正在尝试在节点上编写一些解析器。我不明白这里有什么。 我需要停止要求下一页,如果以前的结果是错误的。 我当前的代码是这样的: 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, func
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();
});
}
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
});
var request=require('request');
var cheerio=需要('cheerio');
变量链接=['http://link1','http://link2','http://link3'];
用于(链接中的l){
var link=links[l];
请求(链接、功能(错误、页面){
如果(错误)抛出错误;
$=cheerio.load(页面正文);
如果($('a')。长度<2){
//在这里,我需要停止从链接数组请求下一个url!
//(如果这是link1的情况,则link2和link3不会请求)
}否则{
//做点什么。。。
}
$.html();
});
}
Node.js是一种异步语言,因此不能在本机javascript中阻止它,如break
,因此您可能会尝试像这样使用async
:
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();
});
}
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
});
var request=require('request');
var cheerio=需要('cheerio');
变量链接=['http://link1', 'http://link2', 'http://link3'];
var async=require('async');
eachSeries(链接,函数(链接,回调){
请求(链接、功能(错误、页面){
如果(错误){
回调(err);
返回;
}
$=cheerio.load(页面正文);
如果($('a')。长度<2){
//在这里,我需要停止从链接数组请求下一个url!
//(如果这是link1的情况,则link2和link3不会请求)
回调(err);
返回;
}否则{
//做点什么。。。
}
$.html();
回调();
});
},函数(err){
如果(错误){
//做点什么识别一些链接抛出错误
返回;
}
//如果每一个请求都成功了,你会做什么
});
上面的代码将为数组(links)中的每个元素运行一个函数,如果其中一个链接调用callback
时出错,它将立即停止迭代,并调用带有错误的callback函数。否则,如果所有元素都将调用callback
,而不使用任何参数,则将在不使用任何参数的情况下调用回调函数
请查看async
文档,查看可能在其他方面对您有所帮助的其他选项。您正在并行请求所有链接。我建议查看库并使用async.eachSeries
。该库可能重复