javascript - sqlite 语句后回调无法运行。所有查询

标签 javascript node.js node-sqlite3

在下面的函数中,我尝试在 sqlite3 中运行 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");

我可能提供了太多信息,也可能提供了太少信息。对于这个问题的反馈将不胜感激,因为这是我在网站上的第一个问题。

最佳答案

我认为在语句中调用random()可能是问题所在。

如果您尝试以下操作会发生什么:

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

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

此外,random() 是您在某处定义的返回要排序的列的函数吗?或者也许Math.random()

关于javascript - sqlite 语句后回调无法运行。所有查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636141/

相关文章:

javascript - 数据在函数中使用之前更改

javascript - 获取事件类的前 li

node.js - 尝试发送文件时 FormData 发送空请求

node.js - 跨平台安装 npm 包 sqlite3

node.js - 在 Node 中使用 readline prompt/setPrompt 时无法清除行

node.js - NodeJS OAuth2.0原理

node.js - 无法在 Node 14.4.0 - Windows 10 上安装 SQLITE3

javascript - 闭包编译器和奇怪的前置代码

javascript - 如何将表单值传递给 ChangePassword.php?

javascript - javascript inside dynamics的BMI计算语法