2017-06-21 55 views
0

我有問題,爲什麼我的查詢變量不增量? 我的代碼:節點使用增量變量的Mysql查詢

function processMessage(event) { 
    if (!event.message.is_echo) { 
     let message = event.message; 
     let senderId = event.sender.id; 

    console.log("Received message from senderId: " + senderId); 
    console.log("Message is: " + message); 
    console.log(); 
    var user = { 
     user_name: '', 
     question_index: 0, 
    } 


    if (message.quick_reply.payload === 'Pass') { 
     connection.query("SELECT text FROM quiz_questions WHERE quiz_id = ?", [question_index], function(error, results, fields) { 
      if (error) throw error; 
      let jsonQuestionResult = getRealResults(results); 
      connection.query("SELECT text FROM question_option WHERE quiz_question_id = ?", [question_index], function(error, results, fields) { 
       if (error) throw error; 
       let jsonAnswerResult = getRealResults(results); 
       console.log(jsonAnswerResult[0]); 
       sendQuestionAnswer(senderId, jsonQuestionResult[0].text, jsonAnswerResult[0].text, jsonAnswerResult[1].text, jsonAnswerResult[2].text); 
       user.question_index++; 
      }) 
     }) 
    } 
} 
} 

我增加user.question_index但是當我打電話而processMessage功能有什麼不對勁的地方它不適用?或者如何做到這一點,當我打電話與有效載荷(通過)快速回復它會顯示數據庫的下一列?

+0

數據庫查詢在node.js中不同步。你的'user.question_index'可能會增加,而不是當你認爲它。 –

+0

所以,我應該增加user.question_index獲得下一個問題的過程看起來像那個開始 - > yest(payload = pass) - > 1question-> 1answer(payload = pass) - > 2question-> 2answer(payload = pass)作爲測驗繼續調用這個func;) –

+0

其實我沒有仔細閱讀你的代碼。答案是正確的。儘管如此,您仍然會遇到同步問題:如果在第一次完成之前有兩個連續呼叫進來,您將讀取錯誤的值。強烈建議你重新考慮你的設計。 –

回答

1

在processMessage外定義你的用戶變量。每次調用該方法時,都會將其重新初始化爲默認值0.因此,如果要保留值

var user = { 
     user_name: '', 
     question_index: 0, 
    } 


function processMessage(event) { 
    if (!event.message.is_echo) { 
     let message = event.message; 
     let senderId = event.sender.id; 

    console.log("Received message from senderId: " + senderId); 
    console.log("Message is: " + message); 
    console.log(); 



    if (message.quick_reply.payload === 'Pass') { 
     connection.query("SELECT text FROM quiz_questions WHERE quiz_id = ?", [question_index], function(error, results, fields) { 
      if (error) throw error; 
      let jsonQuestionResult = getRealResults(results); 
      connection.query("SELECT text FROM question_option WHERE quiz_question_id = ?", [question_index], function(error, results, fields) { 
       if (error) throw error; 
       let jsonAnswerResult = getRealResults(results); 
       console.log(jsonAnswerResult[0]); 
       sendQuestionAnswer(senderId, jsonQuestionResult[0].text, jsonAnswerResult[0].text, jsonAnswerResult[1].text, jsonAnswerResult[2].text); 
       user.question_index++; 
      }) 
     }) 
    } 
} 
} 
+0

我會測試它,謝謝 –

+0

雖然正確的音符還有一個競賽條件。 –

+0

是的,因爲呼叫是異步的,所以有競爭條件。我們可以將響應傳遞給一個回調方法,該方法將增加值。 –