Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: 79137913 en Enero 23, 2019, 10:28:32 AM

Título: [SOLUCIONADO] Funciones asincronas y checkeo constante de su terminacion.
Publicado por: 79137913 en Enero 23, 2019, 10:28:32 AM
HOLA!!!

Necesitaria saber como lograr hacer un checkeo constante sin detener la ejecucion de funciones asincronas.

Código (javascript) [Seleccionar]
            $$.post(baseurl + 'AppRRPP/GetLugar', { x: "x" }, function (dataX) {
                idlugarRRPP = dataX;
            });
            $$.get(baseurl + "Encargados/HorList", {}, function (dataY) {
                ListaHorarios = dataY.split("/");
            });
            $$.get(baseurl + "Encargados/BenList", {}, function (dataZ) {
                ListaBeneficios = dataZ.split("/");
            });
            $$.get(baseurl + "Encargados/EntList", {}, function (dataO) {
                ListaEntradas = dataO.split("/");
            });
            $$.post(baseurl + 'AppRRPP/GetLimit', { x: "x" }, function (dataP) {
                ListaLimit = dataP;
                LimitE = ListaLimit.split("||")[0].split("/");
                LimitB = ListaLimit.split("||")[1].split("/");
            });

//este codigo de aqui abajo debo ejecutarlo cada segundo
            if ((idlugarRRPP == 0 || ListaHorarios[0] != "null" || ListaBeneficios[0] != "null" || ListaEntradas[0] != "null" || ListaLimit.length < 2)==false) {
               //cuando se entra aqui todas las funciones asincronas han terminado de ejecutarse
               //ejecutar codigo de timeout
            }


//el codigo de aqui abajo cuando hayan pasado 15 segundos o si el codigo de arriba dio true
            if (idlugarRRPP == 0 || ListaHorarios[0] != "null" || ListaBeneficios[0] != "null" || ListaEntradas[0] != "null" || ListaLimit.length < 2) {
                mainView.router.back();
                myApp.alert("Su sesion expiro - Verifique conexion a internet", '---');
            } else { mainView.router.loadPage(data + ".html");}



GRACIAS POR LEER!!!
Título: Re:Funciones asincronas y checkeo constante de su terminacion.
Publicado por: dannybombastic en Enero 23, 2019, 10:45:33 AM
Usa los callback de las llamadas para saber cuando estan acabadas no?

Sent from my SM-G960F using Tapatalk

Título: Re:Funciones asincronas y checkeo constante de su terminacion.
Publicado por: 79137913 en Enero 23, 2019, 10:59:06 AM
HOLA!!!

Los callbacks son los que setean las variables, fijate que cada llamada post o get tiene una funcion dentro esa es el callback de success.

GRACIAS POR LEER!!!
Título: Re:Funciones asincronas y checkeo constante de su terminacion.
Publicado por: Solid Water en Enero 23, 2019, 11:03:02 AM
Hola 79137913, podrías explicarnos cual es el problema al utilizar un timmer?
Título: Re:Funciones asincronas y checkeo constante de su terminacion.
Publicado por: ~ Yoya ~ en Enero 23, 2019, 11:24:29 AM
Hola,

Una opcion seria combinar las llamadas HTTP asicronicas con Promises. Hacer las llamadas asicronicas en paralelos y luego esperar que estas terminen su ejecucion. Ejemplo:

Código (javascript) [Seleccionar]
async function saludo() {

//1) Ejecuto los 3 request en paralelo
request1 =  Promise.resolve($.get("https://jsonplaceholder.typicode.com/todos/1"));
request2 =  Promise.resolve($.get("https://jsonplaceholder.typicode.com/todos/2"));
request3 =  Promise.resolve($.get("https://jsonplaceholder.typicode.com/todos/3"));

//2) Espero que los 3 request se completen
const results = [await request1, await request2, await request3];

//3) Despues de este punto, puedo utilizar los valores de los request
request1.then(function(value) {
  console.log(value);
});
request2.then(function(value) {
  console.log(value);
});
request3.then(function(value) {
  console.log(value);
});
}

console.log(saludo());


Resultado:

(https://i.ibb.co/jh4Q8N8/holaaa.png)
Título: Re:Funciones asincronas y checkeo constante de su terminacion.
Publicado por: 79137913 en Enero 23, 2019, 11:26:58 AM
HOLA!!!

Genial gracias chicos, en este momento he solucionado el problema haciendo un timeout a 15 segundos y poniendo un clear timeout en cada success solo si todas las variables estan cargadas, de esta forma, la ultima variable cargada cancela el timeout y termina el proceso.

GRACIAS POR LEER!!!