在 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/