node.js - 使用for each in node js sequelize将数据存储在数组中
问题描述
我正在尝试使用 foreach 将获取的数据推送到数组中,但它只返回循环中的第一个数据。这是我的代码。
exports.getAllTrial = async function (req, res, next) {
try {
new Promise( async (resolve, reject) => {
var reservations = [];
await Schedule.getSchedule()
.then(data => {
data.forEach(async (element) => {
await saveReserve.getAllTrial({where: {scheduleID: element.id, date: "8/18/2020"}})
.then(trial => {
trial.forEach(response => {
reservations.push(response.scheduleID)
})
})
console.log(reservations);
resolve(reservations);
})
});
})
.then(value=>{
res.status(200).json(value);
})
.catch(err => {
console.log(err);
});
} catch (e) {
return res.status(400).json({ status: 400, message: e.message });
}
}
我的预期输出应该是: [ 9, 10, 10 ] 但它只返回 [9]。
解决方案
foreach 循环中的异步代码是个坏主意,因为它不会一个接一个地执行。我建议阅读更多 async/await 和 promise 的概念,因为您在这里混合了一些东西(例如混合await
和.then
)。还值得研究Promise.all
哪个将解决承诺列表和array.map
.
虽然我不知道某些变量saveReserve
应该是什么或做什么,但您的代码可能会简化为:
exports.getAllTrial = async (req, res, next) => {
try {
const data = await Schedule.getSchedule()
const reservations = await Promise.all(
data.map(element => {
return saveReserve.getAllTrial({ where: { scheduleID: element.id, date: '8/18/2020' } })
})
)
return res.status(200).json(reservations)
} catch (e) {
return res.status(400).json({ status: 400, message: e.message })
}
}
推荐阅读
- excel - 当数据来自另一张表时,基于用户表单的自动填充表
- android - FloatingActionButton 未打开对话框
- github - 自动创建拉取请求
- php - Docusign - API 连接 JWT - 需要同意
- c# - 如何在“Listview”中的最后一首歌曲之后停止播放音乐
- c# - 我正在尝试使用带有回归的 ML.NET 创建一个简单的神经网络,它返回指定的数字,但它返回一个不同的数字
- c++ - 将数据从文件 (.csv) 插入变量的功能不起作用
- r - 在R中打开带有日期和时间的excel文件
- symfony - Symfony - API 平台 - Vich Uploader 和漏洞问题
- r - R/dplyr:汇总数据而不分组