2017-07-16 51 views
0
connection.query('select * from `test` WHERE `deny`=false',function(err,rows,fields){ 

for (var i=0; i<rows.length; i++){ 
    if (rows[i].enddate == mydate) 
    { 
      msg = "message"; 
      connection.query('select * from `cash` WHERE `id`=test',function(err2,rows2,fields2){ 
      if (rows2[0].cash >= 30) 
      { 
       connection.query('UPDATE `cash` SET `cash`='+ rows2[0].cash-30 +' WHERE `id`=test',function(err3,rows3,fields3){ 
       msgsend(rows[i].contact,msg); 
       }); 
      } 
      }); 
    } 


} 
}); 

這是我的代碼。 然而,當我跑我的代碼 它顯示了這樣的錯誤: 類型錯誤:未定義Node.js - 從母查詢中獲取數據到嵌套查詢

無法讀取屬性「0」請幫助 什麼是錯我的代碼?

+0

,實際示例* –

+0

我在哪裏放置調試線? – Jongho

回答

0

首先嚐試調試它使用

console.log(rows)console.log(rows2)可能是其中的一個是空的。

而且誤差參數爲理由,你能趕上誤差參數,並檢查他們:

if(err) console.log(err) else //rest of program

同樣ERR2

if(err2) console.log(err2) else //rest of program

這將在解決問題

definetly幫助

編輯

你把調試線放在哪裏?

很明顯,你必須調試

function(err,rows,fields){ console.log(rows); //undefined if empty if(err) console.log(err); else //rest code }

+0

如果我將console.log命令放在第二個查詢之外,我可以通過console.log查看結果。但是,我無法在query2循環內看到query1的結果。第二個和第三個查詢也是一樣。 – Jongho

+0

我的代碼是這樣 功能(ERR,行,場){ 調試行//成功 功能(ERR2,rows2,fields2){ 調試//失敗 調試rows2 //成功 功能的行( ERR3,rows3,fields3){ 調試rows2的//失敗 調試rows3 //成功 //內部代碼 的}} } 嘗試 – Jongho

+0

存儲臨時查詢1的結果變量'變種臨時= rows'比在第二個查詢中使用它 – wrangler

0

你有沒有在第一,你可以看一下*內的循環,簡單的封嘗試Async

connection.query('select * from `test` WHERE `deny`=false',function(err,rows,fields) { 

    for (var i=0; i<rows.length; i++){ 
     if (rows[i].enddate == mydate) { 
      myFuntion(row[i], function(msg) { 
       console.log(msg) // Success! 
      }) 
     } 
    } 
}) 

function myFuntion(row, callback) { 
    async.waterfall([ 
     function(callback) { 
      msg = "message"; 
      connection.query('select * from `cash` WHERE `id`=test',function(err2,rows2,fields2){ 
       callback(null, rows2); 
      }); 
     }, function(rows2, callback) { 
      if (rows2[0].cash >= 30) 
      { 
       connection.query('UPDATE `cash` SET `cash`='+ rows2[0].cash-30 +' WHERE `id`=test',function(err3,rows3,fields3){ 
        msgsend(row.contact,msg); 
        callback(null); 
       }); 
      } 
     } 
    ], function(err){ 
     if(err) 
      console.log("Error: ", err); 
     else 
      callback("Success!"); 
    }) 
}