nodejs sqlite3 查询 returns 空 - 难以理解异步

nodejs sqlite3 query returns empty - trouble understanding async

我确定我在编写代码时没有考虑异步。但我不知道该怎么做。

// order.xml
const db = require("./db");

let orders = db.getNewOrders();
console.log(orders);

//db.js
const sqlite3 = require("sqlite3").verbose();
let db = new sqlite3.Database(process.env.DB_PATH, err => {
  if (err) {
    console.error(err.message);
  }
  console.log("Connected to the test database.");
});

db.run(
  ....
);

function getNewOrders() {
  let orders = [];
  db.each("SELECT * FROM Orders", function(err, row) {
    orders.push(row);
    console.log(1);
  });
  return orders;
}

module.exports.getNewOrders = getNewOrders;

控制台returns

[]
Connected to the test database.
1

但我期待的是数据行。我肯定有数据,我和 SQL 客户核实过。

很明显getNewOrders returns 是一个空数组,因为DB还没有完成操作。我如何更新我的代码,以便数据库完成并填充订单数组,以便我可以在我得到的其他文件中使用它?

您可以 return 来自 getNewOrders 函数的承诺。

您可以使用 db.all 方法代替 db.each

用 await 调用那个函数。

const db = require("./db");

db.getNewOrders().then(rows => {
  console.log(rows);
})

//db.js
const sqlite3 = require("sqlite3").verbose();
let db = new sqlite3.Database(process.env.DB_PATH, err => {
  if (err) {
    console.error(err.message);
  }
  console.log("Connected to the test database.");
});

db.run(
  ....
);

function getNewOrders() {
 return new Promise((resolve, reject) => {
  let orders = [];
  db.all("SELECT * FROM Orders", function(err, rows) {
    resolve(rows);
  });
 }
});

module.exports.getNewOrders = getNewOrders;