如何在调用下一个代码之前等待循环完成

时间:2021-05-11 07:33:36

标签: mysql model controller

==> 这是我的数据库模型代码

 getByObjId = async (objId, callBack) => {
      con.query(
        `SELECT * FROM ${table} WHERE objective_id = ?`,
        [objId],
        async (err, res) => {
          if (err) {
            callBack(null, err);
          } else {
            callBack(null, res);
          }
        }
      );
    };

==> 这里的目标 id 我通过如下循环(在控制器中)

exports.getObjByEmpId = async (req, res, next) => {
          const { emp_id } = req.payload;
          const params = { emp_id: emp_id };
          Objective.getBy(params, async (err, result) => {
            if (err) {
              return next(new erroResponse("Something went wrong", 500));
            } else {
              if (result.length > 0) {
              // I want to modify this result array and add the key risk in it and send it to next
                result.map((data) => {
                //calling databse model to get data for each data.id
                  risk.getByObjId(data.id, (err, row) => {
                    if (err) {
                      return err;
                    } else {
                      data.risk = row;
                    }
                  });
                });
        // Loop over

// The below code is executed first before result array is modified
                //setTimeout(() => {
                  let tempArr = [];
                  let newArray = [];
                  for (let data of result) {
                    let getStatus = data.objective_status.toLowerCase();
                    let isExist = tempArr.includes(getStatus);
                    if (!isExist) {
                      tempArr.push(getStatus);
                      newArray.push({
                        [getStatus]: [data],
                      });
                    } else {
                      for (const newArrData of newArray) {
                        let currKey = Object.keys(newArrData);
                        if (currKey[0] === getStatus) {
                          for (const key in newArrData) {
                            newArrData[currKey[0]].push(data);
                          }
                        }
                      }
                    }
                  }
                  res.status(200).json(newArray);
               // }, 1000);
              } else {
                return next(new erroResponse("No objectives found", 404));
              }
            }
          });
        };

最后,我想在数据数组中添加一个风险键,其中 id 传递给数据库模型并从数据库中获取数据,当数据到来时,我想将该数据添加到 data.risk = data 但在此之前以下代码完整执行

然而,控制器代码与 setTimeout 函数一起工作正常,但这不是一个正确的概念

请帮忙

0 个答案:

没有答案
相关问题