Я пытаюсь создать массив ответов базы данных с использованием синтаксиса асинхронного ожидания.
Я понимаю, что поскольку 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?
Так что я знаю, что вызов базы данных на самом деле работает, но я не могу получить их / в / любой объект, который я могу получить из ожидания.