2017-05-24 44 views
0

使用池節點js中的查詢獲取for循環內的數據輸出值是正確的,但不在正確的位置。 這是我的代碼。如何從節點j的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 } ] 
+0

對mdmid_array_implode_array_st.sort()執行排序操作並再次檢查。 –

+0

thankq chetan的回覆,第一次給正確的位置,但當刷新頁面位置已更改 – tanu

+0

你檢查mdmid_array_implode_array_st兩個條件保持不變嗎? (第一次和刷新頁面之後) –

回答

0

節點js是異步的,在執行循環時不能保持順序。節點循環與其他語言的行爲不同。 我會建議你使用回調來保持秩序的替代解決方案。

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

中保持相同,它只給出第一個值rest rest show undefined。 – tanu

+0

@tanu嘗試此編輯。 –

+0

是的,它的工作thankq @vinoth,請你讓我知道一件事,我們如何在aysnc函數中使用多個查詢 – tanu

相關問題