首页 > 解决方案 > 在 db 中插入对象数组,仅获取控制台中的最后一个对象数据

问题描述

这是我的代码,function insert_data接收对象数组并遍历它们并将它们存储在数据库中

function connect_to_mysql(callback){
    var con = mysql.createConnection(config.db);
    con.connect(function(err) {
        if (err){
            callback(true , null );
        } else {
            callback(false , con );
        }
    });
}


function insert_data(insert_data_stack){


    connect_to_mysql( function(err,conn) {
        if(!err)
        {
            for( var ikay in insert_data_stack )
            {
                 var query_data = insert_data_stack[ikay];
                console.log( ' inserting ---------------->' + ikay );
                console.log( query_data);

                    var query = conn.query('INSERT INTO transactions SET ?', query_data, function(err, result) {
                    if (err)
                    {
                        console.log(err.sqlMessage)                    }
                    else
                    {
                        console.log(' >>>> INSERTED >>>>> ' + query_data.trace_code );
                    }
                });
            }
          //  conn.end();
        }
    });

}

这是问题所在,在这一行中console.log(' >>>> INSERTED >>>>> ' + query_data.trace_code );我只得到最后一个对象的reace_Code

这是我的输出

inserting ---------------->0
{ amount: '1000',
  payment_time: '‪20',
  full_cart: '6274121185233616',
  trace_code: '045330',
  account_id: 5,
  dig4_cart: '3616' }
 inserting ---------------->1
{ amount: '1000',
  payment_time: '‪20',
  full_cart: '6274121185233616',
  trace_code: '045138',
  account_id: 5,
  dig4_cart: '3616' }
 inserting ---------------->2
{ amount: '1000',
  payment_time: '‪20',
  full_cart: '6274121185233616',
  trace_code: '044868',
  account_id: 5,
  dig4_cart: '3616' }
 >>>> INSERTED >>>>> 044868
 >>>> INSERTED >>>>> 044868
 >>>> INSERTED >>>>> 044868

为什么我只得到最后一个对象trace_code

标签: javascriptnode.js

解决方案


到该行代码执行时,for循环已经完成。

解释:https ://dzone.com/articles/why-does-javascript-loop-only-use-last-value

尝试将您的 insert_data 函数更改为以下内容:

function insert_data(insert_data_stack)
{
    connect_to_mysql( function(err,conn) {
        if(!err)
        {
            for( var ikay in insert_data_stack )
            {
                var query_data = insert_data_stack[ikay];
                console.log( ' inserting ---------------->' + ikay );
                console.log( query_data);
                // see https://dzone.com/articles/why-does-javascript-loop-only-use-last-value
                let traceCode = query_data.trace_code;

                var query = conn.query('INSERT INTO transactions SET ?', query_data, function(err, result) {
                    if (err)
                    {
                        console.log(err.sqlMessage)                    
                    }
                    else
                    {
                        console.log(' >>>> INSERTED >>>>> ' + traceCode );
                    }
                });
            }
          //  conn.end();
        }
    });
}

推荐阅读