2017-08-29 101 views
0

我試圖獲取了一定的成效,並以此爲基礎進行這些結果的進一步處理,但我無法繼續工作順序是,節點mysql的順序查詢執行

var sql = query1; 

    con.query(sql, function (err, results) { 
     if (err) throw err; 
    // ids => 5,2,3,4 
     for (i = 0; i < results.length; i++) { 

     target_user = results[i].ID 

     var sql = "DELETE QUERY"; 

     con.query(sql, function (err) { 
      if (err) throw err; 
      console.log(target_user) 

      var sql = "INSERT QUERY"; 
      console.log(sql) 
      con.query(sql, function (err) { 
      if (err) throw err; 

      }) 
     }) 


     } 
    }) 

上面的代碼異步運行,什麼我想到的是在這樣的

// "DELETE QUERY"; 
//5 
// "INSERT QUERY"; 
// "DELETE QUERY"; 
//2 
// "INSERT QUERY"; 

等環路輸出..

但我得到的是

// "DELETE QUERY"; 
//5 
// "DELETE QUERY"; 
//5 //not fetching the next array val 
// "INSERT QUERY"; 
// "INSERT QUERY"; 

任何幫助都非常appriciated。


編輯

從答案我更新了這樣的代碼

現在的代碼看起來像這樣

aysnc.forEach(results, function(elem, callback){ 
target_user = elem.id 
    console.log('out') 
        console.log(target_user) 
        con.query(sql, function (err) { 
         if (err) throw err; 
         console.log('in') 
        console.log(target_user) 
}) 
}) 

一件奇怪的事發生了輸出

out 
5 
in 
5 
out 
2 
in 
5 //when it is supposed to be 2 

回答

1

你可以使用遞歸來解決這樣的平行執行,所以使用異步模塊或以下PROMISE。保持通話功能,直到沒有剩下結果

con.query(sql, function (err, results) { 
    if (err) throw err; 
    deleteAndInsertResults(results); 
}) 

function deleteAndInsertResult(results) 
{ 
    target_user = results[0].ID 

    var sql = "DELETE QUERY"; 

    con.query(sql, function (err) { 
     if (err) throw err; 
     console.log(target_user) 

     var sql = "INSERT QUERY"; 
     console.log(sql) 
     con.query(sql, function (err) { 
     if (err) throw err; 
     results.shift(); 
     if(results.length){ 
      return deleteAndInsertResult(results); 
     } 

     }) 
    }) 
} 
+1

這僅僅是工作的解決方案!謝謝。 –

0

在Node.js的FOR循環將使用一個例子異步

var async = require('aynsc'); 
con.query(sql, function (err, results) { 
    if (err) throw err; 
// ids => 5,2,3,4 
async.forEach(results, function(elem, callback){ 

    target_user = results[i].ID 

    var sql = "DELETE QUERY"; 

    con.query(sql, function (err) { 
     if (err) throw err; 
     console.log(target_user) 

     var sql = "INSERT QUERY"; 
     console.log(sql) 
     con.query(sql, function (err) { 
     if (err) throw err; 
     callback() 
     }) 
    }) 
}, function(err){ 
//final callback once loop is done 
}); 
}) 
+0

謝謝元素,我用你的代碼,但卡住了,編輯我的問題,請參閱如果你能,幫助, –