IvanTabakerka
@IvanTabakerka
Чистокровный говнокодер

Как организовать асинхронную функцию .map?

Преобразовываю новости перед отправкой клиенту. В преобразовании используется функция map(). В объектах доставаемых из БД автор показан как id. Для того что бы там было непосредственно имя автора, я написал функцию (скопипастил) которая достаёт пользователя по id, но эта функция асинхронна. Как мне правильно сделать асинхронной функцию map()?
let rawNews = []; // Массив объектов (Свеженькие новости прямо из БД)
let modifyNews = rawNews.map((item, i, arr) => {
    item.autor = getUserByID(item.autor); // Асинхронная функция которая выставляет имя автора вместо id
    return item;
});
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Ткнуть в доку лучше готового к копипасте ответа
let rawNews = []; // Массив объектов (Свеженькие новости прямо из БД)
let rawCats = []; // Массив объектов с обработанными новостями
// Промис с массивом результатов
let modifyNews = Promise.all(rawNews.map(async (item, i, arr) => {
    item.autor = await getUserByID(item.autor); // Асинхронная функция которая выставляет имя автора вместо id
    return item;
}));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AleksRap
Сделать синхронной, хотели сказать? Просто добавьте async await

let modifyNews = rawNews.map(async (item, i, arr) => {
    item.autor = await getUserByID(item.autor); // Асинхронная функция которая выставляет имя автора вместо id
    return item;
});


Либо получать данные параллельно и как последний промис завершится выполнять дальнейший код
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы