сохранить запрос из sqlite3 в массив в node.js. с асинхронной функцией - PullRequest
0 голосов
/ 21 февраля 2020

я пытаюсь сохранить запрос из sqlite3 в массив в node.js. с функцией асин c. но по какой-то причине возвращаемый массив не определен.

let db = new sqlite3.Database("./indy.db");


async function queryDb() {
  let myRows = [];
  db.all("SELECT * FROM items", async function(err, rows) {
    rows.forEach(row => myRows.push(row));

  });
  return myRows;
}

let getArr = async function() { 
  queryDb() 
    .then(function(value) {
      return value;
    });
}

console.log(getArr());

консольный вывод:

Promise { undefined }

1 Ответ

0 голосов
/ 24 февраля 2020

в том виде, в котором вы его используете, только внутри функции asyn c.

const sqlite3 = require("sqlite3").verbose();
let db = new sqlite3.Database("./indy.db");
async function getArr(sql) {
  let arr;
  arr = await new Promise(function(resolve, reject) {
    let myRows = [];
    db.all(sql, async function(err, rows) {
      rows.forEach(row => myRows.push(row));
      const error = false;
      if (error) {
        reject(new Error("Ooops, something broke!"));
      } else {
        resolve(myRows);
      }
    });
  });
  console.log("after await before return");
  console.log(arr);
  return arr;
}

console.log("before async call");
console.log();
console.log("after async call");

router.post("/query", async function(req, res) {
  const body = req.body;
  res.set("Content-Type", "text/plain");
  res.send(await getArr(req.body.sql));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...