在查询中分配值,并且不会更新

时间:2019-06-19 21:44:58

标签: javascript mysql node.js asynchronous

我试图根据对数组中的db forEach值的查询来更新数组“项目”。当我获得该值并将其分配给项目的当前索引时,它不会在实际数组上更新。

我已经尝试过一些解析拒绝承诺结构,.map,.forEach,普通的for循环,查询内部的回调,但是这些都不起作用。

projects.forEach((project, i) => {
    let query = squel
      .select()
      .field("s.Clave_Proyecto")
      .field("s.Semana_Numero")
      .field("s.Porcentaje_Semana")
      .from("Semana", "s")
      .where("s.Clave_Proyecto = ?", project["Clave_Proyecto"])
      .toParam();

    db.get().query(query.text, query.values, (error, weeks) => {
      if(error) return res.status(400).send(error);
      if(weeks) project["weeks"] = Object.values(JSON.stringify(weeks));
      else project["weeks"] = ["No weeks available"];

      projects[i] = project;
      console.log(projects[i]);
    });
});

它应该以新的“ weeks”属性作为数组返回更新的项目实例。

1 个答案:

答案 0 :(得分:0)

您每次在循环中都需要创建一个新的project对象。否则,您将所有数组元素设置为引用同一对象,而该对象每次都会被覆盖。

您可以使用Object.assign()将全局object克隆到局部变量中。

    db.get().query(query.text, query.values, (error, weeks) => {
      if(error) return res.status(400).send(error);
      let tempProject = Object.assign({}, object);
      if(weeks) tempProject["weeks"] = Object.values(JSON.parse(weeks));
      else tempProject["weeks"] = ["No weeks available"];

      projects[i] = tempProject;
      console.log(projects[i]);
    });