Mit*_*ops 4 javascript sqlite asynchronous node.js async-await
我正在查看本教程,其中有一个名为 aa-sqlite 的库,以便用 async-await 替换 Promises() 语法。
我没有在 npm 上看到 aa-sqlite。async await sqlite 是否还有另一种更新的语法?
这是我正在尝试使用标准 sqlite 库:
const sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database("tmp.db")
async function myfunc(db) {
let sql = "SELECT id id FROM TABLE LIMIT 2"
let res1 = await db.run(sql)
console.log(res1)
for (row of res1) {
console.log(row);
}
Run Code Online (Sandbox Code Playgroud)
但这会产生
TypeError: res1 is not iterable
Run Code Online (Sandbox Code Playgroud)
我不希望res1成为一个对象,而是一个结果的迭代器。如何db.run在 ES7/ES8 中异步/等待查询结果?
小智 6
对我来说,最简单的解决方案是将操作封装在 Promise 中,如下所示:
const res = await new Promise((resolve, reject) => {
db.each('SELECT id FROM table', [], (err, row) => {
if (err)
reject(err)
resolve(row)
})
})
console.log(res)
Run Code Online (Sandbox Code Playgroud)
这样,您将在回调之外同步获得row结果。res
我尝试过 sqlite npm 包,它通过 splite3 实现 async/await,但它不是那么好用。
一个简单的方法是创建一个小模块并传播主要的 sqlite3 功能。
这是我为 Discord 聊天机器人数据库创建的简单模块:
const sqlite3 = require('sqlite3');
const util = require('util');
let db = new sqlite3.Database('./db/chatbot.sqlite3', sqlite3.OPEN_READWRITE, (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the chatbot database.');
});
db.run = util.promisify(db.run);
db.get = util.promisify(db.get);
db.all = util.promisify(db.all);
// empty all data from db
db.clean_db = async function() {
await db.run("delete from users");
await db.run("delete from members");
await db.run("delete from guilds");
db.run("vacuum");
}
// any kind of other function ...
// and then export your module
module.exports = db;
Run Code Online (Sandbox Code Playgroud)
如何使用 - 现在您可以在代码中使用这样的模块:
const db = require('./db');
// get one user
const myUser = await db.get("select * from users where id = ?", [id]);
if (! myUser)
return console.log("User with id", id, "not found");
// get all users
const users = await db.all("select * from users");
users.map((user) => { console.log(user.id, "/", user.name); });
// ... etc ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4729 次 |
| 最近记录: |