javascript - 在执行结果之前等待 sql 并推送到数组
问题描述
我正在使用mysql npm 包从数据库中获取数据。我的目标是从 Table 添加每个list
(id)lists
并将其推送到lists
数组中。我从数据库中获取了正确的数据,但是当我result
查询lists
数组为空时。
我认为我必须在代码中添加async
和await
才能使其工作。在几个地方尝试过,但我没有成功。知道我做错了什么吗?
// GET - get all grocery_lists
Grocery_list.getAll = (result) => {
let lists = []; // <--- List Array
sql.query("SELECT id FROM lists", (err, res) => { // <--- Get all id from 'lists' table
if (err) {
console.log(err);
}
res.forEach(list => { // <--- Loop thru all lists
sql.query(`
SELECT items.id, items.name, items_x_lists.purchased
FROM items_x_lists
INNER JOIN items ON items_x_lists.itemId = items.id
WHERE items_x_lists.listId = ${list.id};
`, (err, res) => { // <--- Get all items for ${list.id} from 'items' table
if (err) {
console.log(err);
}
const list = {};
list.id = res.id;
console.log(list); // <--- { id: 1 } ... { id: 2 }
lists.push(list);
});
});
result(null, lists); // <--- returning empty array instead of [{ id: 1 }, { id: 2 }]
});
};
解决方案
这可能是解决方案
Grocery_list.getAll = async (result) => { return sql.query("SELECT id FROM lists", (err, res) => { // <--- Get all id from 'lists' table if (err) { console.log(err); } }); };
推荐阅读
- c# - 如何在 C# 中为函数提供不同的返回值
- php - Bootstrap 3 日历?
- java - Intent-Filter 允许通过 URL 启动或应用出现在 Android 启动器中
- c# - 避免 WPF 状态栏在窗口垂直调整大小时增加其高度
- java - 有没有办法利用表(天蓝色存储)客户端 API 使用 CosmosDb 设置项目级别 TTL(生存时间)?
- python - 使用 psutil 获取带有进程名称的进程 ID
- php - 如何在php中将三元运算符与数组一起使用?
- java - IBatis 在一种方法中执行多个 sql 语句与 Oracle DB 一起使用,这可能吗?
- maven - 列出 maven-central 注册表中的所有公共包
- php - Laravel 验证 Auth::user()->id;