Si te encuentras con algún detalle que te causa duda puedes dejarlo en los comentarios y trataremos de ayudarte tan rápido como podamos.
Solución:
esto se puede simplificar usando async/await
public GetCurrentUserInformation(): Promise
return this.loginService.GetCurrentUserData().toPromise()
ngAfterViewInit
async ngAfterViewInit()
this.responseData = await this.GetCurrentUserInformation(); // ♂️
if (this.responseData.code != responseCodes.success)
this.googleInit();
Suscribirse a GetCurrentUserData()
la llamada http es asíncrona (cada llamada api del navegador es asíncrona, porque el motor de JavaScript se ejecuta en un solo hilo (google para el bucle de eventos del navegador para obtener más información, esto no es un problema angular))
this.GetCurrentUserInformation().subscribe((data: ResponseData) =>
if (this.responseData.code != responseCodes.success)
this.googleInit();
);
Las funciones asíncronas no se pueden llamar de forma síncrona porque son asíncronas.
subscribe
por lo general, no debe realizarse en métodos que se espera que estén encadenados. Incluso si debería, un método debe devolver un observable y no una suscripción (una suscripción se puede guardar adicionalmente para cancelarla en caso de destrucción).
GetCurrentUserInformation
El método es redundante porque es solo un contenedor para la llamada de servicio. El código se puede refactorizar a:
ngAfterViewInit()
this.loginService.GetCurrentUserData().subscribe(data =>
this.responseData = data;
if (this.responseData.code != responseCodes.success)
this.googleInit();
);