如果座位可用,我的职能部门应该为员工分配座位。我不明白为什么即使我使用了“await”,程序也不能同步。在函数的第一行中,程序按预期运行。它等待从数据库中获取“席位”,然后执行“if(seats.length > 0)”检查并初始化一个空数组。async function AssignSeat(req, res) { var seats = await connection.SeatEmployees.findAll({ where: { SeatId: req.body.seat.SeatId } }) .catch(err => { res.status(err.status).json(err) }); if(seats.length > 0){ var isShared = true; var employees = []; await seats.forEach(async function(seat){ var employee = await connection.EmployeesGraph.findAll({ where: { id: seat.EmployeeGraphId } }) .catch(err => { res.status(err.status).json(err) }); employees.push(employee); }) .catch(err => { res.status(err.status).json(err) }); employees.forEach(employee => { if(employee.frequent == true) isShared = false; }) if(isShared == true){ //assign user to seat; } }}我的问题是在代码的第 13 行,在“等待座位.forEach(异步函数(座位)”)。我想要做的是遍历“座位”的每个元素,获取分配到该座位的员工,并将其推送到“员工”数组中。只有在从所有座位迭代并填充员工数组之后,我才想继续“employees.forEach(employee => {”行。相反,在调用-----"var employee = await connection.EmployeesGraph.findAll({ "---- 之后,程序不会等待 sequelize 从数据库中获取雇员,然后转到----"employees.push(employee);"---- ,正如预期的那样。它转到 ----"employees.push(employee);"---- 之后的行上的括号,然后我收到错误“TypeError:无法读取未定义的属性'catch'”。你能解释一下为什么会发生这种情况吗?
1 回答

猛跑小猪
TA贡献1858条经验 获得超8个赞
最简单的解决方案是使用实际的 for 循环而不是forEach用于此任务。 forEach()不会等待迭代所有内容。
try {
for (const seat of seats) {
var employee = await connection.EmployeesGraph.findAll({
where: {
id: seat.EmployeeGraphId
}
})
.catch(err => {
res.status(err.status).json(err)
});
employees.push(employee);
}
} catch (err) {
res.status(err.status).json(err)
}
添加回答
举报
0/150
提交
取消