亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 sqlite3 db.get 和 db.all 中使用 async/await?

如何在 sqlite3 db.get 和 db.all 中使用 async/await?

牧羊人nacy 2023-05-18 09:52:40
這是我的服務器 mcve:const express = require("express");const app = express();const fs = require("fs");const dbFile = "./sqlite.db";const exists = fs.existsSync(dbFile);const sqlite3 = require("sqlite3").verbose();const db = new sqlite3.Database(dbFile);app.get("/", async (req, resp) => {  await db.run(`INSERT INTO Times VALUES (${ Date.now() })`);  let rows = await db.all("SELECT time FROM Times");  console.log(rows); // The line where I console log rows  resp.send(rows);});app.listen(process.env.PORT || 8080);process.on("uncaughtException", console.log);上面的服務器正在記錄一個數據庫對象,如下所示,Database {}每次我刷新網站時在控制臺中,但我希望它記錄我插入數據庫的行。我在這里做錯了什么?
查看完整描述

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 中的每個函數使用相同的方法。


最好的方法是創建一個模塊并覆蓋您需要的所有這些方法


查看完整回答
反對 回復 2023-05-18
?
www說

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();


查看完整回答
反對 回復 2023-05-18
?
互換的青春

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


查看完整回答
反對 回復 2023-05-18
  • 2 回答
  • 0 關注
  • 428 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號