Построение массива из ответа db с использованием асинхронного ожидания в узле - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать массив ответов базы данных с использованием синтаксиса асинхронного ожидания.

Я понимаю, что поскольку 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?

Так что я знаю, что вызов базы данных на самом деле работает, но я не могу получить их / в / любой объект, который я могу получить из ожидания.

1 Ответ

0 голосов
/ 24 мая 2019

Попробуйте пакет sqlite , а не sqlite3 , используемый в демоверсии. Улучшена поддержка асинхронного ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...