为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript异步函数流

Javascript异步函数流

慕标琳琳 2021-06-28 14:15:02
如果座位可用,我的职能部门应该为员工分配座位。我不明白为什么即使我使用了“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)

}


查看完整回答
反对 回复 2021-07-01
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信