Qua*_*ieu 3 javascript database node.js async-await
我有两个这样的函数:
async getMatches() {
try {
const result = await readRowsFromDb('SELECT * FROM matches');
console.log(result);
} catch (error) {
console.error(error);
}
}
async readRowsFromDb(query) {
const db = await sqlite.open(this.DATABASE_PATH);
const promise = db.all(query);
return promise;
}
getMatches();
Run Code Online (Sandbox Code Playgroud)
问题是我找不到合适的地方放线
db.close()
Run Code Online (Sandbox Code Playgroud)
AFAIK,我应该在得到结果后关闭数据库,但结果在不同的函数中,关闭 getMatches 内的数据库似乎不正确。
我尝试在像这样返回 readRowsFromDb 中的承诺之前关闭数据库
const promise = db.all(query);
db.close();
return promise;
Run Code Online (Sandbox Code Playgroud)
有效。但我仍然觉得有些不对劲,因为我在调用查询后立即关闭数据库连接而不是等待它完成,它不应该起作用。
请指教。
如果您想readRowsFromDb()管理数据库的打开和关闭(这是必须的,因为没有其他人拥有db您刚刚打开的对象),您可以这样做:
async readRowsFromDb(query) {
let db;
try {
db = await sqlite.open(this.DATABASE_PATH);
let result = await db.all(query);
return result;
} finally {
if (db) db.close();
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,因为这是一个函数,所以即使您自己没有直接返回承诺,async它仍然会返回一个解析为 的承诺。result这就是异步函数的工作原理。
可以在另一个函数中关闭数据库的唯一其他方法是,如果您从其他函数传入数据库(这样它可以管理关闭它),或者从这个函数返回数据库,以便其他人可以在关闭之前使用它它。按照您的readRowsFromDb()函数现在的情况,您必须在函数中关闭它。
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |