gpt4 book ai didi

JavaScript 异步函数流程

转载 作者:行者123 更新时间:2023-12-02 23:29:14 26 4
gpt4 key购买 nike

如果座位可用,我的职能应分配一名员工。我不明白为什么即使我使用了“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 行代码,位于“awaits.forEach(async function(seat)”处。

我想要做的是遍历“席位”的每个元素,获取分配给该席位的员工,并将其插入“员工”数组中。

只有在迭代所有席位并填充员工数组之后,我才想继续执行“employees.forEach(employee => {”行。

相反,调用后会发生什么
-----"var employee = wait connection.EmployeesGraph.findAll({ "---- ,程序不等待sequelize从数据库中获取员工然后转到----"employees.push (员工);“----,如预期。
它转到 ----"employees.push(employee);"---- 之后行的括号,然后出现错误“TypeError: Cannot read property 'catch' of undefined”。

您能解释一下为什么会发生这种情况吗?

最佳答案

最简单的解决方案是使用实际的 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)
}

关于JavaScript 异步函数流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56586037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com