Ответы пользователя по тегу JavaScript
  • Почему возвращается пустой массив?

    @DeFaNJI
    1. await с .map не сработает, пока будет выполняться .map тебе уже вернет пустой массив, что бы этого избежать используй Promise.all(и тут применяй .map)

    В твоем случае должно сработать примерно вот так:

    async getProjectStates(project_id) {
        const states = await State.findAll({
            where: {
                project_id
            },
            order: [
                ['serial_number', 'ASC']
            ]
        })
    
        let statesDto = []
    
        if (states.length) {
            await Promise.all(states.map(async state => {
                const tasks = await Task.findAll({
                    where: {
                        state_id: state.id
                    },
                    order: [
                        ['createdAt', 'DESC']
                    ]
                })
    
                let tasksDto = []
    
                if (tasks.length) {
                    tasks.map(task => {
                        const taskDto = new TaskDto(task)
                        tasksDto.push(taskDto)
                    })
                }
    
                const stateDto = new StateDto(state)
    
                stateDto.tasks = tasksDto
                
                statesDto.push(stateDto)
            }))
        }
    
        return statesDto
    }

    2. Если это mongoose, то в states должен быть массив, а при запросе, который ничего не нашел должен возвращаться пустой массив. Пустой массив в JS все равно будет помечен как true, поэтому уместнее тут было бы делать условие по .length . Точно также с tasks в .map

    const arr = []
    
    console.log(Boolean(arr)) // true
    Ответ написан
    Комментировать
  • Как реализовать последовательные чтение и запись JSON-файла на node.js?

    @DeFaNJI
    async function writeData(data) {
      data = JSON.stringify(data);
      let themes;
      try {
        fs.writeFile("localData.json", data, "utf8", async (err) => {
          if (err) console.error(err);
          else {
            fs.readFile("localData.json", "utf8", (error, array) => {
              themes = array
            });
          }
        });
      } catch (err) {
        console.error(err);
      }
      if (themes) return themes;
    }
    app.post("/newarray", async function (req, res) {
      try {
        const newarray = await writeData(req.body);
        console.log("newarray was successfully saved", newarray);
        res.json(newarray);
      } catch (err) {
        console.log(err);
      }
    });


    Возможно вот так?
    Ответ написан
    Комментировать