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

标签 mysql node.js express

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

遵循我的 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/

相关文章:

node.js - npm 在执行下一步之前等待端口/命令(同时)

node.js - 如何使用 Jade 文件中的谷歌分析

mysql - 无法通过终端 (ssh) 访问 fortrabbit mysql 数据库

mysql - 加密 MySQL 中所有数据的最佳方法是什么

node.js - socket.io 客户端和 socket.io 服务器有什么区别? socket.io 的替代品?

javascript - session 未定义 - 使用 Connect-Redis/ExpressJS/Node

javascript - 如何通过 Express 获取请求获取正文?

javascript - JSON 键作为 JavaScript 中的 JSON 值

mysql - LiquibasegenerateChangeLog 不包括列长度(MySQL)

mysql - 如何编写连接 MySQL 服务器并执行 SQL 查询的 c 程序?