【问题标题】:Async and Request, return results异步和请求,返回结果
【发布时间】:2016-07-13 18:40:46
【问题描述】:

在处理请求和异步 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 个域名数组,我想将它们全部聚合到一个主列表中,以便我可以解析它。

【问题讨论】:

    标签: node.js asynchronous request


    【解决方案1】:

    您需要做的只是将回调函数添加到您的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
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-15
      • 2016-12-05
      • 2014-10-02
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      相关资源
      最近更新 更多