gpt4 book ai didi

mysql - 在 Node 循环中选择和插入未按预期工作

转载 作者:行者123 更新时间:2023-11-29 10:40:50 24 4
gpt4 key购买 nike

我尝试在表中插入数据,然后检查它是否已存在于数据库表中?如果存在,则循环继续并显示控制台消息“已经存在”,如果不存在,则尝试插入表中。但有些记录已经在数据库表中,然后也插入到表中。

遵循我的 NodeJS 代码

(function loop(index){
if(index==apires.items.length){
console.log("Cron completed");
res.send("Cron completed");
return false;
}
inventoryObj = apires.items[index];
hash_name = inventoryObj.market_hash_name;

db.query('SELECT market_hash_name FROM inventory_master WHERE market_hash_name = "'+hash_name+'"', function(err,result, fields){
if(result.length){
console.log('already exist');
loop(++index);
}
else
{
var post = {data_here};
var query = db.query('INSERT INTO inventory_master SET ?', post, function (error, results, fields) {
if (error) throw error;
loop(++index);
});
}
});
})(0);

最佳答案

我猜这是由于代码的异步行为而发生的。您可以使用async库使其工作,这将允许您的代码一次在元素上执行。示例

// assuming apires.itemsis an array 
async.each(apires.items, function(inventoryObj, callback) {

hash_name = inventoryObj.market_hash_name;

db.query('SELECT market_hash_name FROM inventory_master WHERE market_hash_name = "'+hash_name+'"', function(err,result, fields){
if(result.length){
console.log('already exist');
callback('success'); // go for next iteration
}
else
{
var post = {data_here};
var query = db.query('INSERT INTO inventory_master SET ?', post, function (error, results, fields) {
if (error) throw error;
callback('success'); // go for next iteration
});
}
});
}, function(err) {
//once all finished, it will come here,if no error occurred then err will be null
});

关于mysql - 在 Node 循环中选择和插入未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45520251/

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