节点函数什么也不返回sqlite3

时间:2018-07-28 16:58:55

标签: node.js sqlite

我正在尝试在项目中使用sqlite3,但遇到了问题。我的函数没有返回任何值。我在return语句之前添加了console.log,奇怪的是,它可以正常工作,但是在函数返回后在之后记录它们。

console.log(getNext());

function establishConnection(callback) {
    const db = new sqlite3.Database('database.db');
    db.serialize(() => {
        callback(db);
    });
    db.close();
}

function getNext() {
    establishConnection(db => {
        db.get('SELECT col1, col2 FROM table ORDER BY priority LIMIT 1;', (err, row) => {
            console.log([row.col1, row.col2]); // works
            return [row.col1, row.col2];       // doesn't work
        });
    });
}

我不是Node方面的专家,但这似乎应该可以工作,但我不明白为什么不行。有人可以向我解释一下,并可能提供解决方案吗?

1 个答案:

答案 0 :(得分:1)

getNext是异步的,这就是为什么您在函数“返回”之后看到日志记录的原因。您的代码当前使用回调样式,因此此答案将遵循您的格式。使用promisesasync/await是更现代的方法。

getNext(result => console.log(result));

function establishConnection(callback) {
    const db = new sqlite3.Database('database.db');
    db.serialize(() => {
        callback(db);
    });
    db.close();
}

function getNext(callback) {
    establishConnection(db => {
        db.get('SELECT col1, col2 FROM table ORDER BY priority LIMIT 1;', (err, row) => {
            callback([row.col1, row.col2]);
        });
    });
}