Вы приближаетесь. Все, что осталось сделать, - это вызвать getUserData
для каждого UID, который вы получите от getChallenges
.
. Комбинирование этих двух параметров будет выглядеть примерно так:
let challenges = await getChallenges();
let users = await Promise.all(challenges.author.map((uid) => getUserData(uid));
console.log(challenges.challengeName, users);
Новое здесь is Promise.all()
, который объединяет несколько асинхронных вызовов и возвращает обещание, которое завершается, когда все они завершены.
Ваш код на первый взгляд кажется мне немного странным из-за способа, которым вы возвращаетесь данные из getChallenges
. Вместо того, чтобы возвращать три массива с простыми значениями, я бы рекомендовал возвращать один массив, в котором каждый объект имеет три значения:
static async getChallenges() {
const db = require('firebase').firestore();
const snapshot = await db.collection('challenges').get();
const challenges = snapshot.docs.map(doc => { name: doc.data().name, author: doc.data().created_by, score: doc.data().high_score.score });
return challenges;
}
Если затем вы хотите добавить пользователя name к каждому объект в этом массиве, в дополнение к UID, который уже существует, вы можете сделать:
let challenges = await getChallenges();
await Promise.all(challenges.forEach(async(challenge) => {
challenge.user = await getUserData(challenge.author);
});
console.log(challenges);