Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/05/2020, 12:39
prueba230683
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Axios: valor correcto del contador dentro del then pero no afuera

Cita:
si la consulta fue respondida y la variable es global, aunque sea una solicitud asíncrona, debería estar actualizada.
El problema es que no se puede saber de antemano cuándo será actualizada dicha variable global (errores_personal_cnt), porque como bien indicas, la petición es asíncrona.

No tenemos más información de tu código, pero quizá es algo que se pueda replantear de otra forma. Aunque siempre puedes hacer que la función validar devuelva una promesa:

Código:
var errores_personal_cnt = 0;
function validar(dato_a_validar, url, secc, control)
{
        var datastr = url + '?secc=' + secc + '&dato=' + dato_a_validar;
        return axios.get(datastr)
        .then(response => {
                var estado = response.data;
                "Respuesta: " + console.log(estado);
                if (estado != 1)
                {
                        control.style.borderColor = "red";
                        control.style.backgroundColor = "red";
                        control.title = estado;
                        errores_personal_cnt++;
                        errores_personal += "\t- " + estado + "\n";
                        return false;
                }
                else
                {
                        control.style.borderColor = "lightgreen";
                        control.style.backgroundColor = "lightgreen";
                        control.title = "Correcto";
                        return true;
                }
        })
        .catch(response => {
                "Respuesta: " + console.log(response.data);
                console.log("Estado: error -> " + response.data);

                control.style.backgroundColor = error_app;
                control.style.borderColor = error_app;
                control.title = "Ha ocurrido un error con la aplicación. Intentalo nuevamente en unos segundos.";
                        errores_personal_cnt++;
                errores_personal += "\t- ha ocurrido un error en la validación\n";
                return false;
        });

}
Y meter el resto de tu código en una función anónima de este tipo:

Código Javascript:
Ver original
  1. (async () => {
  2.   // ...
  3.   var valor = await validar(dato_a_validar, url, secc, control); // esperamos a que la promesa se resuelva
  4.   console.log(valor); // true o false
  5.   console.log(errores_personal_cnt); // la variable actualizada
  6. })();


Última edición por prueba230683; 21/05/2020 a las 14:28