选择使用递归来迭代节点js

时间:2016-03-03 15:11:29

标签: javascript node.js recursion callback

我正在迭代一个20000行的mysql数据库,问题是在每一行我需要调用一个url并获取其内容并更新数据库,问题是......我该如何等待整个过程继续迭代?,我怎样才能让它变得更快,比如做两个,及时做树?感谢

var query = connection.query('SELECT * from product where product.product_description = "0" ', function(err, rows, fields) {
        kontador =1;
        if (!err)
        {
            var url = rows[0].url;
            url = url.replace('../..','');
            //console.log(url);
            id = rows[0].id;
            url = 'http://example.com'+url;


            doCall(url,id,kontador,function(response){
                console.log(response,kontador);

                if(response && kontador <= rows.length){

                    var url = rows[kontador].url;
                    url = url.replace('../..','');
                    id = rows[kontador].id;

                    url = 'http://www.example2.com'+url;
                    //console.log(id);

                    doCall(url,id, kontador, doCall);
                    kontador +=1;

                }

            });


        }
        else
            console.log('Error while performing Query.');
    });

function doCall(urlToCall,id,kontador, callback) 
{
    request({'url':urlToCall}, function(error, response, html){
            //console.log('inside');
            //console.log(error);
            if(!error){

                var $ = cheerio.load(html);
                $('#content').filter(function(){
                     var data = $(this);
                     data = data.find('p');
                     // console.log('-');
                     // console.log(data.html());

                     var queryy = connection.query(' UPDATE product SET  product_description = "'+data.html()+'"  WHERE id = '+id, function(err, rows, fields) {
                        if (!err)
                        {
                            console.log('updated! ');
                             return callback(true);
                        }else{
                            console.log('error sql!');
                        }
                    });


                    //process.exit();
                });
            }
        });
}

1 个答案:

答案 0 :(得分:0)

为了编排应用程序的异步行为(可以并行执行,如果有限制,...),您应该使用现有的库,如:

还有许多其他库可以帮助您构建复杂的异步调用图。