let savedArrayUID = []; let savedArrayEmails = []; function pullIt(emailSearch) { db.collection(collectionName).where('email', '==', emailSearch).get() .then((querySnapshot) => { querySnapshot.forEach((doc) => { savedArrayUID.push(doc.id); savedArrayEmails.push(doc.data()); // doc.data() is never undefined for query doc snapshots console.log(doc.id, " => ", doc.data()); // saved. push(doc.id); return savedArrayUID; }) }); }Puedo consultar los datos de la base de datos pero no puedo sacar la variable del alcance de la función. Quiero usar esta función para pasar correos electrónicos para encontrar información de su perfil guardado en mi base de datos.
Realmente me cuesta entender cómo Promiseses puede ayudar aquí. Tengo la sensación de que esto ya está resuelto, pero no pude encontrar una respuesta en ninguna parte.
Hay dos pasos para esto:
pullIt (como una promesa).pullIt correctamente, esperando que se resuelva la promesa. En el código, te falta un retorno de nivel superior del código pullIt :
function pullIt(emailSearch) { // 👇 return db.collection(collectionName).where('email', '==', emailSearch).get() .then((querySnapshot) => { querySnapshot.forEach((doc) => { savedArrayUID.push(doc.id); savedArrayEmails.push(doc.data()); }) return savedArrayUID; // 👈 }); } Y luego, cuando llame a pullIt , deberá usar await o then , para asegurarse de que pullIt se haya completado antes de intentar acceder al resultado.
Así que:
pullIt("yourSearchTeam").then((results) => { // TODO: use your results here }) O (en un contexto async ):
const results = await pullIt("yourSearchTeam") // TODO: use your results here