node.js - 使用节点中的异步等待从数据库响应构造一个数组
问题描述
我正在尝试使用 async await 语法构造一组数据库响应。
我知道,由于 async await 只是一种以更好的语法包装承诺的方式,因此将此处给出的面向承诺的指令转换为该格式应该很容易。
这是我所拥有的:
const sqlite3 = require('sqlite3').verbose();
const express = require('express')
const bodyParser = require("body-parser")
async function getDB(dbname) {
let db = new sqlite3.Database(dbname)
return db;
}
app.get('/', async (req,res) => {
let db = await getDB(dbname)
let r = await db.serialize(() => {
let results = []
db.each(`SELECT * FROM MyTable LIMIT 3`, (err, row) => {
if (err) {
console.error(err.message);
}
let m = row.id;
console.log(m);
results.push(m)
});
return results
});
res.send(await r)
})
app.listen(port, ipaddr);
当我调用它时,响应是:
{"open":false,"filename":"dbname.db","mode":65542}
但我希望:
[1,2,3]
发生了什么事,我该如何解决?
在控制台中,我可以看到正在检索记录:
[
1,
2,
3
] # this is exactly the thing I want returned! Why can't I retrieve it?
所以我知道数据库调用确实有效,但我似乎无法让它们/进入/任何我可以摆脱等待的对象。
解决方案
推荐阅读
- ruby - Alpine Linux 上的 Rails ActiveSupport 时间和时区错误
- excel - 为什么宏中的 RangetoHTML 类型不匹配错误?
- asp.net-core - Asp.net Web API .NET Core 3.1 和 Azure AD - system.unauthorizedaccessexception:在不记名令牌中找不到范围或角色声明
- java - 新整数等于 2 的差
- javascript - JavaScript For Loop 不返回任何内容(不运行)?
- java - Netbeans,从 res 文件夹中获取文件属性
- oracle-cloud-infrastructure - 如何根据给定值切换 OIC 连接器
- javascript - 有没有办法让提交按钮仅使用 HTML 的输入中的特定代码可用?
- javascript - Firebase:从事务中返回批量写入
- java - 无法在未命名的模块加载器应用中将用户详细信息服务强制转换为用户