2017-06-19 11 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の組み込み関数です –

関連する問題