Estoy usando el módulo AngularFireAuth para llevar el UID del usuario actual al componente en la carga de la página a través de la resolución de la ruta, pero las líneas de código necesarias para devolver la promesa sin envolver al componente no parecen resolverse y dejan la promesa sin cumplir.
Código de módulo de enrutamiento relevante para el módulo de edición de perfiles:
const routes: Routes = [ { path: '', component: EditProfilesComponent, resolve: { userUID: UserInfoService }, }, ];El código del servicio de resolución es el siguiente:
export class UserInfoService implements Resolve<any> { constructor(public afAuth: AngularFireAuth, public af: AngularFirestore) {} async resolve() { const user = await this.afAuth.currentUser; const userUID = user?.uid; return userUID; //returns undefined } }También intenté convertirlo en una promesa y resolverlo, pero eso también volvió indefinido. El código se veía así:
const promise = new Promise(async(resolve, reject) => { const user = await this.afAuth.currentUser const userUID = user?.uid; resolve(userUID) })Y luego el código del componente de consumidor de EditProfiles es:
export class UserInfoService implements Resolve<any> { constructor(public afAuth: AngularFireAuth, public af: AngularFirestore) {} async resolve() { const user = await this.afAuth.currentUser; const userUID = user?.uid; return userUID; //returns undefined } }Realmente no estoy seguro de cómo hacer que la promesa devuelva el UserUID para ser utilizado y consumido por ese componente, y muestre datos específicos del usuario, pero no estoy seguro de cómo asegurarme de que esté allí antes de que se cree una instancia del componente. .
@Bravo tenía razón, era un problema con el diseño del código, resulta que lo que realmente quería era que la página esperara hasta que se resolviera la promesa de imprimir los datos, por lo que lo que se necesitaba en ngOnInit era el siguiente código
ngOnInit(): void { this.afAuth.authState.subscribe((user) => { if(user) { //write logic here to make sure the promise gets resolved } else { //logic for when the page is getting the information } }) }Así es como te aseguras de que las promesas enviadas desde firebase se resuelvan, te suscribes al authstate observable y cuando ese observable se vuelve verdadero, finalmente puedes recuperar la información de firebase que necesitas, esa es la pieza clave que me faltaba. resulta que los solucionadores de ruta pueden no haber sido la mejor herramienta para.