Me gustaría devolver el objeto "Usuario".
Mensaje de error recibido:
La variable 'usuario' se usa antes de ser asignada.ts(2454)
Traté de usar async/await pero no puedo asignar await a "return user" al final del código o user= await snapshot.val() porque se encuentra en el alcance de onValue() .
getLoggedInUser(id: string): User { const db = getDatabase(); var user: User; onValue(ref(db, '/users/' + id), (snapshot) => { user = snapshot.val(); // ... }, { onlyOnce: true }); return user; }Cuando llama a onValue , obtiene el valor actual de esa ruta en la base de datos y luego también obtiene todas las actualizaciones de ese valor. Dado que su devolución de llamada se puede llamar varias veces, no hay forma de devolver un valor único.
Si solo desea obtener el valor una vez y devolverlo, querrá usar get en lugar de onValue . Entonces también puedes usar async / await .
async getLoggedInUser(id: string): Promise<User> { const db = getDatabase(); var user: User; const snapshot = await get(ref(db, '/users/' + id)) user = snapshot.val(); return user; }De hecho, tengo un problema similar, aunque trato de obtener datos con lógica de paginación. Tenemos miles de registros y representarlos bien (10 - 25 por página) sería la mejor opción de todos modos.
const dbRef = query(ref(database, folder), orderByChild(field), startAt(start), limitToLast(limit)) return onValue(dbRef, (snapshot) => { const values = Object.values(snapshot.val()); return {data: values, total: values.length, page: page} })Puedo ver los valores dentro de onValue, pero parece que no devuelve el valor en absoluto. No estoy seguro de dónde ir aquí, la documentación sobre eso no está completamente clara para mí (un principiante como desarrollador).