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
添加回答
舉報