猿问

Javascript异步函数流

如果座位可用,我的职能部门应该为员工分配座位。我不明白为什么即使我使用了“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'”。


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


慕标琳琳
浏览 130回答 1
1回答

猛跑小猪

最简单的解决方案是使用实际的 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)}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答