我正在尝试制作一个简单的价格检查刮板。我正在为程序的一部分而苦苦挣扎,因为它需要更新数据库中已存在一个小时以上的项目。
一切正常,除了我将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值。