Node.js异步循环问题

时间:2019-03-30 08:31:17

标签: node.js

我正在尝试制作一个简单的价格检查刮板。我正在为程序的一部分而苦苦挣扎,因为它需要更新数据库中已存在一个小时以上的项目。

一切正常,除了我将URL和更新的价格作为新条目重新输入数据库之外。我从for循环中获得了所有条目的最后一个URL,因此在以后的检查中用处不大!

根据我所读的内容,我可以肯定这是一个异步问题,但是我无法理解解决该问题所需要的内容。我应该看看回调,承诺还是其他东西?

connection.query("SELECT * FROM productprice WHERE DATE_ADD(date, INTERVAL 1 HOUR) <= CURRENT_DATE()", function(err, rows, fields){
if (err) throw err;

    for (var i in rows) {

        request(rows[i].urlsource, function(error, response, html){
            if(!error){
                var $ = cheerio.load(html);

                var priceup, urls;

                $('#priceblock_ourprice').filter(function(){
                    var data = $(this);
                    priceup = data.text();
                    urls = rows[i].urlsource;

                    console.log(rows[i].urlsource, priceup);
                })

            }

            var sql = "INSERT INTO productprice (urlsource, price, date) VALUES (?, ?, ?)";
            connection.query(sql, [urls, priceup, now], function (err, result) {
                if (err) throw err;
                console.log("something got inserted");
                });

        }) ;//REQUEST

    }//FOR LOOP 

})//CONNECTION.QUERY

我认为这是一个异步问题,当cheerio仍在查看DOM并获取价格时,for循环继续遍历条目,因此,当它回到数据库中时,它只会获取最后一个URL值。

0 个答案:

没有答案