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
。该库可能重复