Es parte del código de mi proyecto. Antes de que se inicie la aplicación, el servicio de usuario debe verificar los permisos a través de una función que verifica los permisos del usuario. Sin embargo, la función APP_INITIALIZER no funciona correctamente. (El apiservice obtuvo la información con la solicitud de obtención y confirmó que no hubo ningún problema con la operación). Me pregunto si hay una manera de usar Observable sin usar async/await.
// APP_INITIALIZER function function load(userService: UserService){ () => { return userService.getUser(); } } // userService - getUser() this.user$ = new Behavior Subject(null); getUser() { from(this.apiService.getUser()){ user => this.user$.next(user) } }Como lo he probado, funciona bien si cambia el código de servicio de usuario de la siguiente manera. Sin embargo, me pregunto si hay alguna forma de hacerlo sin usar toPromise, lastValueFrom.
// userService - getUser() this.user$ = new Behavior Subject(null); getUser() { const user = from(this.apiService.getUser()); user.subscribe(user => this.user$.next(user)); return user.toPromise(); }¿Por qué lo haces tan complicado? No creo que necesites un tema de comportamiento. Puedes hacerlo así:
getUser():Observable<any> { return this.apiService.getUser(); }y si necesita almacenar en caché al usuario, puede hacerlo así:
user:any = null; getUser():Observable<any> { if(this.user){ return of(this.user); } return this.apiService.getUser().pipe( tap(user => this.user = user) ); }