javascript - 在 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
?
解决方案
到该行代码执行时,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();
}
});
}
推荐阅读
- angular - Angular:数据绑定到数据属性不起作用
- postgresql - TypeORM PostgreSQL 语句超时
- javascript - 如何检查 div 是否可见,然后使用 jQuery 在除此 div 之外的任何其他位置单击时将其隐藏?
- javascript - 我需要传递从 api 调用获得的 id 来调用另一个 api 调用
- ansible - Ansible:如何从列表中连接字典的属性?
- perl - Perl Net::SFTP::Foreign 断开连接不关闭连接
- sql - 如何从表中查找缺失值
- python - 地址范围的最小值、最大值和步长
- python - alpha 和 beta 大于 1 的指数平滑
- image - 容器内的码头工人不再工作