【问题标题】:Request node sync请求节点同步
【发布时间】:2017-06-14 12:35:45
【问题描述】:

有人在没有异步的情况下制作以下代码吗? 我希望执行 pass 下面的代码同步传递。

var url = 'http://xxxxxx.com/';
var cont = 1;

while(cont != 10){

    request(url + cont,function(err, res, html){
        var $ = cheerio.load(html);
        var list = $('li');
        list.each(function(idx, el){
            var url2 = $(el).children('a').attr('href');
            request(url2, function(error, response, body){
                //I Want execute this response for continue
            });
        });
    });
    cont++;
}

【问题讨论】:

  • 我认为这个要求需要更多解释
  • 你不能在 node.js 中做同步网络。如果您用文字描述您实际尝试使用代码完成的任务,我们可以帮助您了解如何使用 node.js 中的异步方法进行编程。您当前的代码实际上并没有对结果做任何事情,因此我们无法从该代码中看出您真正想要完成什么。

标签: node.js asynchronous request cheerio


【解决方案1】:

试试这个,如果你需要 n 级,我希望请求调用只有 2 级,但这不应该工作。然后我们需要递归来代替它。
如果有问题请告诉我:)

async.times(10, function(n, next) {
        request(url + cont,function(err, res, html){
                var $ = cheerio.load(html);
                var list = $('li');
                async.each(list, function(el, cbk){
                    var url2 = $(el).children('a').attr('href');
                    request(url2, function(error, response, body){
                        //I Want execute this response for continue
                        cbk(err, data);
                    });
                }, next);
            });
    }, function(err, users) {
        //data is 2D array
        //err is error if any
    });  

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2014-08-23
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    相关资源
    最近更新 更多