我试图根据对数组中的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”属性作为数组返回更新的项目实例。
答案 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]);
});