使用节点中的异步等待从数据库响应构造数组

时间:2019-05-23 20:52:42

标签: node.js sqlite async-await

我正在尝试使用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?

所以我知道数据库调用实际上是有效的,但是我似乎无法将它们放入/我可以从等待中得到的任何对象。

1 个答案:

答案 0 :(得分:0)

尝试使用sqlite package,而不是演示中使用的sqlite3。它对异步等待具有更好的支持。