异步和请求,返回结果

时间:2016-07-13 18:40:47

标签: node.js asynchronous request

无法处理请求和异步NPM,也是JS的新手。

    var queries = getURLS();

    async.map(queries, function(url, callback) {
        var options = {
            url: url,
            proxy: config.ProxuURL + ":" + config.ProxyPort,
            headers: {
                'SwitchProxy': location,
                'User-Agent': getUA()
            },
            resolveWithFullResponse: true
        };

        request(options, function (err, res, body){
            if (!err && res.statusCode === 200) {
                var urls = [];

                var $ = cheerio.load(body);

                $('h3.r a').each(function(i) {
                    urls[i] = getDomain($(this).attr('href'));
                });

                //How do I return urls so I can access it outside of the async loop?
            }
        });
    });

如果我在console.log(urls)中收到10个域名数组,我想将它们汇总到一个主列表中,以便我可以解析它。

1 个答案:

答案 0 :(得分:0)

您需要做的只是将回调函数添加到async.map()并在那里查找结果。此外,为了使您的回调函数获取值,您需要返回回调,并返回您想要返回的数据。

var queries = getURLS();

async.map(queries, function(url, callback) {
    var options = {
        url: url,
        proxy: config.ProxuURL + ":" + config.ProxyPort,
        headers: {
            'SwitchProxy': location,
            'User-Agent': getUA()
        },
        resolveWithFullResponse: true
    };

    request(options, function (err, res, body){
        if (err)
            return callback(err, null);         
        if (!err && res.statusCode === 200) {
            var urls = [];

            var $ = cheerio.load(body);

            $('h3.r a').each(function(i) {
                urls[i] = getDomain($(this).attr('href'));
            });

            // return urls back to async.map()
            return callback(null, urls);
        }       
    });
}, function(err, results) {
    if (err) 
        console.log(err);
    else
        console.log(results) // Array of all URL Arrays returned from each queries iteration
});