2017-06-19 66 views
2

在下面的函數中,我試圖在sqlite3中運行statment.all查詢。然而,該函數在沒有運行回調函數的情況下結束。回調失敗後,sqlite statment.all查詢

即使經過徹底的調試和少量的實驗,我仍然無法確定問題。 最奇怪的是,我有另一個類似的查詢在代碼中工作得很好。它也包含在問題中。

這裏是有問題的代碼:

function gameSetup (questions_num){ 
var questions = []; 

getQuestions.all(questions_num, function (e, rows) { 
    console.log("the callback is working!"); // this line never runs 

    if (e) { 
     return new Promise((resolve, reject) => { 
      reject(e); 
     }); 
    } 
    else{ 

     var answers, question; 
     for (let row of rows) 
     { 
      answers = [row.correct_ans, row.ans2, row.ans3, row.ans4]; 
      answers = shuffle(answers); 
      question = {"question":row.question, "ans1":answers[0] , "ans2":answers[1] , "ans3":answers[2] , "ans4":answers[3]}; 
      questions.push(question); 
      console.log(questions); 
     } 
    } 

    return new Promise((resolve, reject) => { 
     resolve(questions); 
    }); 
});} 

這是SQL語句:var getQuestions = db.prepare("select * from t_questions order by random() limit ?");

,我有另一個類似的代碼工作:

app.get("/rooms", checkAuth, (req, res) => { 
    getRooms.all((e, data) => { 
     if(e) { 
      return res.status(500).json(e); 
     } 
     else if (data.length == 0) { 
      res.render('rooms', {items: data, error: "no rooms found"}); 
     } 
     else 
     { 
      res.render('rooms', {items: data, error: "false"});   
     } 
    }); 
}); 

用下面的語句:

var getRooms = db.prepare("select * from t_games where start_time is null"); 

我可能提供的信息太多,或太少。對這個問題的反饋將不勝感激,因爲這是我在網站上的第一個問題。

+1

如果從通話中刪除'questions_num'參數會怎麼樣? –

+0

它似乎沒有幫助,但感謝您的建議 –

回答

0

我認爲在聲明中調用random()可能是問題所在。

,如果你嘗試類似,會發生什麼:

var getQuestions = db.prepare("select * from t_questions order by ? limit ?") 

getQuestions.all([random(), questions_num], function (e, rows) { ... 

而且,是random()返回列被責令你的地方定義的函數?或者也許Math.random()

+0

隨機是SQLite的內置函數 –