【发布时间】:2019-06-13 17:49:46
【问题描述】:
如果有空位,我的职能部门应分配一名员工。我不明白为什么即使我使用了“等待”,程序也不能同步。
在函数的第一行,程序按预期运行。它等待从数据库中获取“席位”,然后执行“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 行,在“await seat.forEach(async function(seat)”处。
我要做的是遍历“席位”的每个元素,获取分配到该席位的员工,并将其推入“员工”数组。
只有在遍历所有席位并填充员工数组后,我才想继续执行“employees.forEach(employee => {”行。
相反,调用之后会发生什么
-----"var employee = await connection.EmployeesGraph.findAll({ "---- ,程序不等待sequelize从数据库中获取员工然后去----"employees.push (employee);"---- ,如预期的那样。
它转到 ----"employees.push(employee);"---- 之后的行括号,然后我收到错误 "TypeError: Cannot read property 'catch' of undefined"。
您能解释一下为什么会这样吗?
【问题讨论】:
-
使用实际的 for 循环代替。
forEach不会等待迭代。 -
您能否按原样查看您的问题,然后点击“编辑”以正确格式化?您的代码缩进不正确,甚至没有标记为代码,等等。
标签: javascript function asynchronous sequelize.js