Как добиться ожидаемого поведения от сервера node?

Я только неделю изучаю бэкенд на node, поэтому мой вопрос может показаться вам очень смешным или странным, судите строго, буду только рад критике.
Какая задача вызвала у меня затруднение? Клиент начинает загружать страницу и отсылает id страницы, дальше сервер принимает это id (тут код работает отлично, поэтому я не приложил его ) и получает всех друзей пользователя, дальше сервер проходиться по полученному списку друзей и возвращает информацию о каждом друге в JSON строке, вместе с общим количеством друзей. Вот код :
GetAllFriends(id:number) {
        if (id == 0) {
            return JSON.stringify({
                status: 400,
                count: null,
                array: null
            });
        }
        return new Promise( (res, rej) => {
            this.UserRepository.findOne({
                attributes: ['friends'],
                where: {id: id}
            }).then( async (Res) => {
                const Response = JSON.parse(Res.friends);
                if (Response.count != null && Response.count > 0) {
                    let Array:number[], JsonToResponse: {count: number, array: any[]};
                    if (Response.array.length > 0) {
                        Array = Response.array.split(",");
                        JsonToResponse = {
                            count: Response.count,
                            array: []
                        };
                        Array.map( async (value) => {
                            try{
                                const result = await this.UserRepository.findOne({
                                    attributes: ['avatar', 'name', 'surname'],
                                    where: {id: value}
                                });
                                if (result.name && result.name != '' && result.name != null) {
                                    JsonToResponse.array.push( {
                                        avatar: result.avatar,
                                        name: result.name,
                                        surname: result.surname,
                                        id: value
                                    });
                                }
                            } catch (err) {
                                console.log(err)
                            }
                        });
                        console.log(JsonToResponse)
                        return res( JSON.stringify({
                            status: 200,
                            message: 'kk',
                            json: JSON.stringify(JsonToResponse)
                        }) )
                    } else {
                        return res('{"status": "400", "Message":"No friends"}');
                    }
                } else {
                    return res('{"status": "400", "Message":"No friends"}')
                }
            }).catch( err => {
                return res('{"status": "400", "Message":"No friends"}')
            })
        })
    }

Тут я столкнулся с неожиданной ошибкой, для которой я даже костыль придумать не способен. Порядок действий очень странный. Сначала сервер получает пользователя ( тут всё нормально ), потом он начинает перебирать его друзей:
сначала отработает код до Array.map(), потом любой код внутри Array.map(), несвязанный с result (увеличение переменной, console.log и так далее), затем я увижу на экране результат строки console.log(JsonToResponse)
затем сервер вернёт результат и только потом я увижу в консоли запросы к БД. Таким образом JSON строка не содержит никакой информации о пользователях, так как эта информация загружается после ответа. Как сделать поведение сервера ожидаемым:
получение пользователя, затем перебор всех друзей с запросом к БД и добавлением этой информации в массив, затем
результат строки console.log(JsonToResponse) и только затем вывод?
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы