Я пытаюсь написать функцию, которая не возвращает ее значение, пока не будет выполнено обещание внутри функции. Вот упрощенный пример того, что я пытаюсь сделать.
'use strict';
function get(db, id) {
let p = db.command('GET', 'group:${id}');
p.then(g => {
g.memberNames = [];
g.members.forEach(id => {
User.get(db, id)
.then(profile => g.memberNames.push(profile.name))
.catch(err => reject(err));
});
return g;
});
}
Это функция, которая запрашивает идентификатор группы и возвращает данные для этой группы. Попутно он также добавляет имена пользователей в структуру данных, чтобы отображать их имена вместо их идентификатора пользователя. Моя проблема в том, что это работает асинхронно и пропускает обратные вызовы .then. К тому времени, когда он вернет g, ни один из обратных вызовов не был вызван, а g.memberNames
все еще пуст. Есть ли способ заставить функцию ждать возврата g, пока не будут вызваны все обратные вызовы?
Я много чего видел об ожидании. Здесь это необходимо? Крайне нежелательно добавлять в мой проект другие библиотеки.