我正在尝试在项目中使用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方面的专家,但这似乎应该可以工作,但我不明白为什么不行。有人可以向我解释一下,并可能提供解决方案吗?
答案 0 :(得分:1)
getNext
是异步的,这就是为什么您在函数“返回”之后看到日志记录的原因。您的代码当前使用回调样式,因此此答案将遵循您的格式。使用promises或async/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]);
});
});
}