Назначение значения внутри запроса, и оно не обновляется - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь обновить массив "projects" в зависимости от запроса значения 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]);
    });
});

В качестве массива должен возвращаться экземпляр проекта, обновленный новым атрибутом недель.

1 Ответ

0 голосов
/ 20 июня 2019

Вам необходимо каждый раз создавать новый объект 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]);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...