javascript - 在查询内分配值并且它没有更新

标签 javascript mysql node.js asynchronous

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

我已经尝试过一些解析拒绝 promise 结构、.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”属性更新的项目实例。

最佳答案

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

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

    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]);
    });

关于javascript - 在查询内分配值并且它没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676306/

相关文章:

javascript - Mongoose find() 使用锁存器在 for 循环内调用

javascript - 组件不呈现任何内容

PHP 从数据库 WHERE 中计数

mysql - AWS RDS 错误代码 : 2013 Lost Connection to MySQL server during Query

javascript - 命令行的输入在什么时候被解析成node.js中的process.argv?

javascript - 如何在 node.js 中的文件的每一行末尾添加文本?

javascript - 如何获得漂亮的 URL - Node.JS

javascript - 当 Charts.js 上的某些数据显示工具提示时增加点半径

javascript - 清除数据表后显示加载 gif

java - JPA查询仅按日期搜索而忽略时间