Estoy tratando de hacer reaccionar todos los elementos de una colección en Firebase en una matriz para poder usarlos más tarde en React.
Tengo esto actualmente:
const retrievegear = firebase.firestore().collection('gear').get().then(querySnapshot => { querySnapshot.forEach(doc => { const check = doc.data().Name; console.log(check); }); });Lo cual está bien: me muestra todos los nombres de los artículos en la colección de equipo. Pero lo quiero dentro de una matriz y solo quiero algunos de los campos de la colección.
Luego estoy usando esta matriz para completar las casillas de verificación, por lo que necesito que se declare const en algún lugar para que mi devolución pueda acceder a ella.
El método get() de Firestore es asíncrono y devuelve una Promesa, por lo que solo en la función de devolución de llamada que se pasa a then() se obtiene el resultado.
En consecuencia, debe hacer lo siguiente:
const myArray = []; firebase.firestore().collection('gear').get().then(querySnapshot => { querySnapshot.forEach(doc => { const check = doc.data().Name; console.log(check); myArray.push(check); }); // Here do whatever you want with the myArray array which contains the data from the collection });Si desea transformar este código en una función a la que puede llamar desde otros lugares de su código, haga lo siguiente (usamos async/await para mejorar la legibilidad):
async function getGearData() { const myArray = []; const querySnapshot = await firebase.firestore().collection('gear').get(); querySnapshot.forEach(doc => { const check = doc.data().Name; console.log(check); myArray.push(check); }); return myArray; }Tenga en cuenta que esta función es asíncrona , por lo que debe llamarla de la siguiente manera:
getGearData() .then(gearData => { // Here and only here you get the value console.log(gearData); // .... }) Tenga en cuenta que también puede usar el método map() en la matriz devuelta por querySnapshot.docs .