Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从节点js中for循环内的数据库中获取数据_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript 如何从节点js中for循环内的数据库中获取数据

Javascript 如何从节点js中for循环内的数据库中获取数据,javascript,mysql,node.js,Javascript,Mysql,Node.js,使用节点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_

使用节点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 } ]

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);

这可能是处理此类任务的最佳方法,使用Promise和async Wait

var计数器=0; 常量waitFor=ms=>newpromiser=>setTimeoutr,ms; mdmid_数组_内爆_数组_st.forEachasync num=>{ 等待50; console.lognum; /**开始输出你想要的…写下你的查询,我只是复制粘贴了你的代码,还没有检查**/ var mdmid_arr=mdmid_array_内爆_array_st[计数器]; pool.query从crm客户反馈日志中选择消费交易金额作为消费交易金额 其中,cnt_mdm_id按cnt_mdm_id在+mdmid_arr+订单中 ASC,函数DEALERR,dealrslt{ dealrslt\u sa=dealrslt[0]。交易金额; console.logdealrslt; }; //结束************************************ 计数器++;
};在mdmid_数组上执行排序操作。排序并再次检查。感谢chetan的回复,第一次给出正确的位置,但在刷新页面位置时已更改。您是否检查了mdmid_数组内爆_数组在这两种情况下是否保持相同?第一次刷新页面后是的,mdmid_array_Inbode_array_st在两种情况下都保持不变是的,它的工作方式是thankq@vinoth,请您再告诉我一件事,我们如何在aysnc函数中使用多个查询查看async.瀑布可能适合您的需要。还有一个问题,我们如何在ejs模板中发送此结果使用此库如果您的问题得到解决,请接受答案。我们如何在变量中获取函数结果值??或者我希望上面的输出结果是变量
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);