Saltar al contenido

¿Cómo hacer una llamada síncrona en angular 5?

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();
        
    );

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *