我正在尝试使用async await语法构造一个数据库响应数组。
我了解到,由于异步等待只是一种以更好的语法包装承诺的方式,因此将here的面向承诺的指令转换为该格式应该很容易。
这就是我所拥有的:
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?
所以我知道数据库调用实际上是有效的,但是我似乎无法将它们放入/我可以从等待中得到的任何对象。