TransWikia.com

alguien sabe como puedo esperar que termine la llamada a un API y después seguir con mi código

Stack Overflow en español Asked by Brandon Alvarado on November 10, 2021

Estoy trabajando con ionic y hago una llamada a un API el cual me devuelve un valor para hacer una validación, el problema es que hace la validación sin esperar que termina la llamada del API

Este es el metodo de validacion

validar() {
    if (this.validacion == "1") {

      this.usuariosServicio.intentosUsu(this.user).subscribe((Usuarios) => {
        this.listaUsuarios = Usuarios;
        if (this.listaUsuarios[0] != null) {
          this.valorbloqueos = this.listaUsuarios[0].intentos;
        }
      });

      if (this.valorbloqueos >= 0 && this.valorbloqueos < 3) {
        if (this.user == this.usuBD && this.pass == this.claveEnc) {
          this.intentos = 0;

          this.usuariosServicio
            .cambiarestado(this.user, this.intentos)
            .subscribe((Usuarios) => {
              this.listaUsuarios = Usuarios;
            });

          this.usuariosServicio
            .llenarBitacoraAcceso(this.user, this.intentos)
            .subscribe((Usuarios) => {
              this.listaUsuarios = Usuarios;
            });

          this.presentAlert("Informacion", "", "Logueo Exitoso.");
        } else {
          this.presentAlert("Informacion", "", "La contraseña es incorrecta.");
          //obtener intentos y setearlos en sumaintentos + 1
          //llenar bitacora
          //cambiar estado
          this.usuariosServicio.intentosUsu(this.user).subscribe((Usuarios) => {
            this.listaUsuarios = Usuarios;
            if (this.listaUsuarios[0] != null) {
              this.intentos2 = this.listaUsuarios[0].intentos;
              this.sumaintentos = this.intentos2 + 1;
            }
          });

          this.usuariosServicio
            .llenarBitacoraAcceso(this.user, this.intentos2)
            .subscribe((Usuarios) => {
              this.listaUsuarios = Usuarios;
            });

          this.usuariosServicio
            .cambiarestado(this.user, this.sumaintentos)
            .subscribe((Usuarios) => {
              this.listaUsuarios = Usuarios;
            });
        }
      } else {
        this.presentAlert(
          "Informacion",
          "",
          "El usuario se encuentra Bloqueado."
        );
      }
    } else {
      this.presentAlert(
        "Informacion",
        "",
        "Usuario no registrado en el sistema."
      );
    }
    
  }

por ejemplo necesito que el if:

if (this.valorbloqueos >= 0 && this.valorbloqueos < 3) {

se realice cuando este llamado: haya concluido

this.usuariosServicio.intentosUsu(this.user).subscribe((Usuarios) => {
        this.listaUsuarios = Usuarios;
        if (this.listaUsuarios[0] != null) {
          this.valorbloqueos = this.listaUsuarios[0].intentos;
        }
      });

Lo mismo lo necesito para los otros llamados a la API pero con solo que me expliquen como hago el primero yo hago el resto

creo que lo que necesito es asyn await pero nose como utilizarlo

2 Answers

La llamada es asincrona, por lo que las validaciones deben incluirse dentro de la llamada. Cada una de esas llamadas son concluidas cuando se termina de ejecutar el codigo dentro de la funcion definida en subscribe(func):

this.usuariosServicio.intentosUsu(this.user).subscribe((Usuarios) => {
    this.listaUsuarios = Usuarios;
    if (this.listaUsuarios[0] != null) {
      this.valorbloqueos = this.listaUsuarios[0].intentos;
    }
    // insertar validaciones Aqui
    if (this.valorbloqueos >= 0 && this.valorbloqueos < 3) {
       
    }
});

Answered by F.Igor on November 10, 2021

Usando promesas. Fetch usa promesas!

fetch(URL)
.then(data => ejecutoAlgo())
.then(data=> ejecutoOtraCosa())
.catch(err=> console.log("Algo salio mal");

Answered by Edwin Munguia on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP