gpt4 book ai didi

javascript - 在数据库中的循环 (for) 中插入值时出现问题 : same value is inserted - node js/sql

转载 作者:行者123 更新时间:2023-11-29 18:42:40 26 4
gpt4 key购买 nike

我尝试在循环内将一些数据插入数据库。问题是它总是插入相同的值(第一个值)。我的意思是即使我的变量的值不同(我将其显示在控制台上,以便在查询数据库以插入它之前检查一切是否正常)。

我的程序是基于Node.js的。

这是我的代码示例:

var obj = JSON.parse(result.body);
global.store_urls = [];

for (let i = 0; obj.productEntities.length > i; i++){

global.store_urls.push(obj.productEntities[i].url);
var reference=obj.productEntities[i].IdProduct;
var brand=obj.productEntities[i].Brand;
var price=obj.productEntities[i].Price;
var new_price=obj.productEntities[i].PriceNew;
var reduction=obj.productEntities[i].sale_state;
var type_1=obj.productEntities[i].Category;
var sold=obj.productEntities[i].sold;

console.log(reference+" / "+brand+" / "+price+" / "+new_price+" / "+reduction+" / "+type_1+" / "+sold);

//Row (data) insertion part
var sql = mysql.format("SELECT * FROM vd_tendance WHERE url=?", [obj.productEntities[i].url]);
var selectUrl = connection.query(sql, function(err,rows,fields) {

if(err){throw err;}
//Checking the value exist on the table
if(rows.length > 0){
//If already exists, no need to insert
console.log(rows.length);
}else{
//Save to database
connection.query('INSERT INTO `vd_tendance` VALUES ( NULL , ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP())',
[ reference,
type_1,
brand,
price,
new_price,
reduction,
sold,
url,
]
, function (err, result) {
if (err) {console.error('error inserting into database : ' + err.stack); return;}
else{}
});
}
});


}

结果始终是在每行中插入相同的数据(变量采用的第一个值)。

你能给我一些解决这个问题的想法吗?也许这与异步 Node js 系统完全有关?

谢谢大家!

最佳答案

循环在调用异步函数的回调之前完全执行。

解决方案是将数组项捕获在闭包中,例如使用 forEach:

obj.productEntities.forEach(function(entity){
global.store_urls.push(entity.url);
var reference = entity.IdProduct;
...

另请注意,整个循环仍然在进行查询之前执行,如果后面的代码依赖于正在更新的数据库,这可能会出现问题。在这种情况下,您最好看看处理异步任务的现代解决方案:

关于javascript - 在数据库中的循环 (for) 中插入值时出现问题 : same value is inserted - node js/sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44844755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com