Solución:
Me parece bastante simple:
let loadedPosts = {};
posts = db.collection('posts')
.orderBy('timestamp', 'desc')
.limit(3);
posts.get()
.then((docSnaps) => {
docSnaps.forEach((doc) => {
loadedPosts[doc.id] = doc.data();
db.collection('users').child(doc.data().uid).get().then((userDoc) => {
loadedPosts[doc.id].userName = userDoc.data().name;
});
})
});
Si desea evitar que se cargue un usuario varias veces, puede almacenar en caché los datos del usuario en el lado del cliente. En ese caso, recomendaría factorizar el código de carga del usuario en una función auxiliar. Pero será una variación de lo anterior.
Haría 1 llamada de documento de usuario y la llamada de publicaciones necesaria.
let users = {} ;
let loadedPosts = {};
db.collection('users').get().then((results) => {
results.forEach((doc) => {
users[doc.id] = doc.data();
});
posts = db.collection('posts').orderBy('timestamp', 'desc').limit(3);
posts.get().then((docSnaps) => {
docSnaps.forEach((doc) => {
loadedPosts[doc.id] = doc.data();
loadedPosts[doc.id].userName = users[doc.data().uid].name;
});
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)