2 回答
TA贡献1830条经验 获得超3个赞
如果 sqlite3 不支持 async/await 那么你需要创建一个像这样的 ex 承诺的异步函数
async function db_all(query){
return new Promise(function(resolve,reject){
db.all(query, function(err,rows){
if(err){return reject(err);}
resolve(rows);
});
});
}
然后像这样使用它
await db_all("SELECT time FROM Times");
对需要使用的 sqlite3 中的每个函数使用相同的方法。
最好的方法是创建一个模块并覆盖您需要的所有这些方法
TA贡献1775条经验 获得超8个赞
NPM 上有几个 SQLite 包。
sqlite3
这是您正在使用的包。它是基于回调的,应该像这样使用:
db.all("SELECT time FROM Times", function(err, rows) { });
注意:该.all()
函数返回数据库实例,而不是结果,因此您可以这样做:db.all(query1, (err, rows) => {}).all(query2, (err, rows) => {});
。Query2 不会等待 query1 完成。
sqlite
这是包的包装器sqlite3
,事实上,需要安装它才能运行。这是基于承诺的:
const rows = await db.all("SELECT time FROM Times");
更好的sqlite
这是一个完全不同的包。它不像上面两个示例那样异步运行查询,而是在主线程中运行每个查询。它的作者认为这样更好(对于典型的 SQLite 工作负载)。
const rows = db.prepare("SELECT time FROM Times").all();
TA贡献1797条经验 获得超6个赞
以上都不是我的选择:(
'better-sqlite' 是 python-ballasted 包,它只是增长容器 'sqlite' 看起来像 M$ 打字稿掌握培训
我使用这个不错且简单的解决方案 https://www.scriptol.com/sql/sqlite-async-await.php
或者当需要事务支持并且使用额外的小包没有问题时 https://www.npmjs.com/package/sqlite-async
添加回答
举报