Стандартная реализация map
не ожидает обратного вызова, переданного ей. В результате вызов карты возвращает обещания до завершения обратных вызовов. У вас есть два варианта.
const membersToSend = []
for (const member of members) {
const memberPhotoUrl = `${process.env.REACT_APP_ONE_API_URL}/api/users/${
member.id
}/photo`;
let memberPhoto = await getImage(memberPhotoUrl);
member.photo = memberPhoto;
membersToSend.push(member);
}
или накатить собственную реализацию асинхронной карты.
Array.prototype.mapAsync = async function (callback) {
const output = []
for (const el of this)
output.push( await callback(el) ) <-- // Note the await on the callback
return output
}
Edit:
Обратите внимание, что вышеуказанный метод выполняет обещания в последовательности. Как указывает Джед, если вы хотите запустить все запросы одновременно и дождаться их разрешения,
const memberPhotos = await Promise.all(members.map(member => {
const memberPhotoUrl = `${process.env.REACT_APP_ONE_API_URL}/api/users/${
member.id
}/photo`;
return getImage(memberPhotoUrl);
}))
Но этот метод может перегрузить вашу сеть, если запросов слишком много, используйте с осторожностью.