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;
我确定我在编写代码时没有考虑异步。但我不知道该怎么做。
// 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;