javascript - 如何在node js的for循环中从数据库获取数据

标签 javascript mysql node.js

在 Node js 中使用池查询在 for 循环中获取数据输出值是正确的,但位置不正确。 这是我的代码。

for(var k=0; k < mdmid_array_implode_array_st.length; k++){
var mdmid_arr=mdmid_array_implode_array_st[k];
pool.query("select sum(cnt_deal_amt) as cnt_deal_amt from crm_clients_feedback_log where cnt_mdm_id IN ("+mdmid_arr+") ORDER BY cnt_mdm_id ASC",function(dealerr,dealrslt){
dealrslt_sa=dealrslt[0].cnt_deal_amt;
console.log(dealrslt);
})
}

OUtPUT:
[ RowDataPacket { cnt_deal_amt: 512529 } ]
[ RowDataPacket { cnt_deal_amt: 33000 } ]
[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: 1000 } ]
[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: 43600 } ]
[ RowDataPacket { cnt_deal_amt: 0 } ]
[ RowDataPacket { cnt_deal_amt: 0 } ]
[ RowDataPacket { cnt_deal_amt: 9500 } ]
[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: 11500 } ]

每次刷新页面时位置发生变化时,输出结果值的位置也不正确。

[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: 512529 } ]
[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: 43600 } ]
[ RowDataPacket { cnt_deal_amt: 0 } ]
[ RowDataPacket { cnt_deal_amt: 9500 } ]
[ RowDataPacket { cnt_deal_amt: 33000 } ]
[ RowDataPacket { cnt_deal_amt: null } ]
[ RowDataPacket { cnt_deal_amt: 0 } ]
[ RowDataPacket { cnt_deal_amt: 1000 } ]
[ RowDataPacket { cnt_deal_amt: 11500 } ]
[ RowDataPacket { cnt_deal_amt: null } ]

最佳答案

Node js 是异步的,执行循环时无法保留顺序。Node 循环的行为与其他语言不同。 我建议您使用回调来保留顺序的替代解决方案。

var k = 0;
function query(cb) {
    var mdmid_arr= mdmid_array_implode_array_st[k];
    var my_query = "select sum(cnt_deal_amt) as cnt_deal_amt from crm_clients_feedback_log where cnt_mdm_id IN ("+mdmid_arr+") ORDER BY cnt_mdm_id ASC";
    pool.query(my_query,cb);
}

var result = function(dealerr,dealrslt){
    dealrslt_sa=dealrslt[0].cnt_deal_amt;
    console.log(dealrslt);
    k ++;
    if(k < mdmid_array_implode_array_st.length) {
        setTimeOut(query,0,result);
    }   
}

query(result);

关于javascript - 如何在node js的for循环中从数据库获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149412/

相关文章:

javascript - 是否可以检索用户在我的页面上以编程方式使用的搜索词

javascript - 如何隐藏 ChartJs 上的第一个 Y 轴刻度线?

javascript - 查找缩小的 Javascript 中的错误位置

php - 将日期格式(在 DB 或输出中)更改为 dd/mm/yyyy - PHP MySQL

mysql - 从MySql中的不同表中获取父子记录(一对多)

JavaScript 用文字字符串换行符替换图形字符串换行符

php - 如何使用 phpMyAdmin 连接到您的生产/开发数据库?

ruby-on-rails - 部署 Rails 和 Nodejs

node.js - 使用容器隔 ionic 进程

javascript - 将参数传递给一个类上调用另一个类的方法的便捷方法