Estoy tratando de obtener el valor de mi Firestore DB Async Function cvUpload . Pero no importa cuánto tiempo espere el valor, aún no está definido si lo llamo en mi componente.
Veo que muchos tienen los mismos problemas con async await y promises. Pero realmente no puedo resolverlo. Realmente necesito algunos consejos aquí.
DatabaseService.ts
export class DatabaseService { constructor( private dbService : DatabaseService ) {} async cvUpload (id : string) { const userRef = collection(this.db, this.user_db) const q = query(userRef, where("id", "==", id)); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.data().cv) /// False (Thats correct) return doc.data().cv; }); }DashboardComponent.ts
constructor( private dbService : DatabaseService ) { } async ngOnInit() { await this.checkCV('uyDer0BxoVekGU2XnYa3Xm77nm03') } async checkCV(id : any) { let result = await this.dbService.cvUpload(id) /// This shoud return FALSE }Estoy agradecido por cualquier ayuda o consejo que me lleve más lejos aquí
En primer lugar, aquí:
querySnapshot.forEach((doc) => { console.log(doc.data().cv) /// False (Thats correct) return doc.data().cv; ...Estás haciendo un forEach ... Supongo que estás esperando recibir solo 1 elemento... Pero si no, ten cuidado porque solo tratarías el primer elemento...
De todos modos, suponiendo que solo tendrá un elemento allí:
Probablemente tenga un problema con el valor de retorno "falso"... ¿Podría tratar de tratar todo esto con un objeto, para verificar si todavía sucede?
Algo como esto:
DatabaseService.ts
querySnapshot.forEach((doc) => { console.log(doc.data().cv) /// False (Thats correct) const result: {result: boolean}; result = { result: doc?.data()?.cv ?? false, }; return result; });DashboardComponent.ts
async checkCV(id : any) { const {result} = await this.dbService.cvUpload(id) /// This shoud return FALSE }el error real radica en el método cvUpload. En realidad, no está devolviendo nada de la función cvUpload. Devolver algo dentro de Array.forEach() no cuenta como valor de retorno de cvUpload.
Tal vez deberías regresar
async cvUpload(id: string) { const userRef = collection(this.db, this.user_db) const q = query(userRef, where("id", "==", id)); const querySnapshot = await getDocs(q); return querySnapshot.docs[0].data().cv; };