2017-05-24 5 views
0

ノードjsのプールクエリを使用してforループ内のデータをフェッチする出力値は正しいものの、正しい位置ではありません。 ここに私のコードです。ノード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 } ] 
+0

mdmid_array_implode_array_st.sort()で並べ替え操作を実行し、再度確認します。 –

+0

ありがとうございました返信、最初に正しい位置を与えるが、ページの位置を更新するときに変更されました – tanu

+0

mdmid_array_implode_array_stは両方の状態で同じままになっていますか? (1回目と更新後のページ) –

答えて

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

これは最初の値だけを返します。 – tanu

+0

@tanuこの編集を試してください。 –

+0

ありがとうございましたthankq @vinoth、aysnc関数で複数のクエリを使用する方法をもう1つ教えてください – tanu

関連する問題