如果以前的结果错误,则中断请求功能

时间:2016-02-14 07:56:39

标签: 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, 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();
});
}

1 个答案:

答案 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个文档,了解可能以其他方式为您提供帮助的其他选项。