我正在使用 MariaDB 连接器在 Node.js 中创建 REST API。由于 MariaDB 连接器必须返回一个承诺,我正在尝试从所述承诺中检索值,但我似乎遗漏了一些东西,因为它没有将值一直返回到我需要的地方。
在我的主文件中,我有这条路线:
const userController = new UserController();
app.get("/users", (req, res) => {
console.log("Getting user list");
userController.getAllUsers(res);
});
在 UserController 中,我有这段代码,它调用一个单独的 dbService 来运行查询:
public getAllUsers(res: any) {
let query = "SELECT * FROM USERS";
console.log("Running select query: " + query);
this.dbService.runSelectQuery(query).then((r) =>
{
console.log("UserController result: " + r);
res.send(r);
});
}
最后,我在 dbService 类中有 runSelectQuery 方法,该方法调用 MariaDB 连接器来创建连接、运行查询并处理结果:
public async runSelectQuery(query: string) {
let conn;
let result;
try {
conn = await this.pool.getConnection();
await conn.query(query).then((r) => {
console.log("dbService result: " + r);
result = r;
});
return result;
} catch (err) {
throw err;
} finally {
if (conn) return conn.end();
}
}
问题是,当我向此路由发出请求时,dbService 方法会看到来自 MariaDB 连接器的有效结果,然后尝试将该结果返回给 UserController 类(由于该函数是异步的,该类被包装在 Promise 本身中) )。然而,UserController 将从 dbService 返回的 Promise 值视为未定义。
Getting user list
Running select query: SELECT * FROM USERS
dbService result: [object Object]
UserController result: undefined
为了正确地将值从 dbService Promise 传递到 UserController,以便我可以在 REST 响应中将其发送回,是否缺少某些内容?
finally
子句中返回的值会覆盖之前返回的result
:
function a() {
try {
return 1;
} finally {
return 2;
}
}
console.log(a());
这会记录“2”,而不是“1”。