【发布时间】:2017-12-11 18:03:21
【问题描述】:
我正在尝试从节点函数中查询 sqlite3。根据结果,它应该将 TRUE 或 FALSE 返回给调用代码。这就是我所做的,但总是得到“未定义”:
var sqlite3 = require("sqlite3").verbose();
var dbOpen = function dbOpen() {
sqlite3 = require('sqlite3').verbose();
db = new sqlite3.Database('./internaldb/OPMSE.db');
}
module.exports.dbOpen = dbOpen;
dbOpen();
mKey = 'AIzaSyCrIYuHJ_jiZqmGYoAs7mxiloB3-OBx5WI';
async function db1() {
function db2() {
db.each("SELECT STATUS status FROM API_Keys WHERE KEY = ? AND STATUS = ?", [mKey, '1'], (err, row, x) => {
var keyValid = false;
if (err) {
console.log('There is an error in API Validation')
} else {
console.log(keyValid + '<--This is from upper fun')
keyValid = true;
return keyValid;
}
db.close();
return keyValid;
});
} // db2
d = await db2();
console.log(d + '<--Supposed to return TRUE or FALSE')
} //db1
x = db1();
console.log(x)
/*Returns:
Promise { <pending> }
undefined<--Supposed to return TRUE or FALSE
false<--This is from upper fun
*/
【问题讨论】:
-
什么是未定义的?
-
查看 db.each 回调的函数表达式 ...返回的函数不会从函数 db2 返回...函数 db2 没有返回,因此它返回 undefined ...
await与否 - 您在 db1 中也没有 return 语句,因此它将返回值undefined的已解决承诺 -
另外,
db.each建议回调可以被多次调用,那么您如何期望从多次调用回调中获得单个返回值。 -
您使用
await db2()但db2不是异步的。它被定义为db1(异步)中的常规函数。你需要async function db2() -
函数 db2 正在返回。即使在函数 db1 中添加了 return,结果也是一样的。制作 db2,异步函数什么也没做。 db.each 将始终通过查询返回一条记录(我的测试表目前只有一条记录)。 keyValid 变量的值在函数 db2 中很好。但是db1函数看不到,我猜是这个问题。
标签: javascript node.js sqlite