• Почему возвращается пустой массив?

    @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
    Ответ написан
    Комментировать