Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?

Iniciado por AlbertoBSD, 5 Diciembre 2017, 20:58 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

Bueno realmente esto me tiene harto.

Tengo unos dias buscando una solucion para realizar la funcion sleep en javascript y que funcione en  Internet Explorer.

Mi solucion anterior fue usar promesas y funciona de maravilla, pero el detalle que tengo unos patrones que no salen de la edad de piedra y siguen usando Internet Explorer, no quieren usar Chrome por nada del mundo.

Solución anterior:

Código (javascript) [Seleccionar]

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}


Funciona al 100 en Crome y otros navegadores mas actualizados pero no sirve ni en Internet Explorer 11. Marca error por que no reconoce las parabras para await y async y no reconoce la sintaxis de => para el resolve....

Ahora tome de stack overflow el siguiente código.

https://stackoverflow.com/questions/36016327/how-to-make-promises-work-in-ie11

y NO FUNCIONA

Código (javascript) [Seleccionar]

function sleep(ms) {
    tiempo = ms;
    return new Promise(function(resolve) {
        setTimeout(function() {
            resolve("result");
        }, tiempo);
    });
}



Este si reconoce la sintaxis de la funcione, pero de todos modos sigue marcando error en los async y await.

Ya intente, genera una peticion async = false al Servidor para que el servidor realizare el tiempo de espera, pero no es respetado por los navegadores.

Tambien he intentado y NO FUNCIONA

Código (javascript) [Seleccionar]

      function sleep(delay) {
        var start = new Date().getTime();
        while (new Date().getTime() < start + delay);
      }


Tomado de: https://eureka.ykyuen.info/2011/02/20/javascript-sleep-function/

Alguno de ustedes tiene algo de experiencia con esto.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

#!drvy

Intentar usar sleep es una mala idea dado que el resultado puede ser impredecible pues estas yendo en contra del lenguaje por no hablar del uso intensivo del CPU que causa.

Pregúntate si realmente necesitas un sleep o lo puedes solventar de manera asíncrona.

Saludos

AlbertoBSD

Cita de: #!drvy en  5 Diciembre 2017, 21:12 PM
Intentar usar sleep es una mala idea dado que el resultado puede ser impredecible pues estas yendo en contra del lenguaje por no hablar del uso intensivo del CPU que causa.

precisamente estoy usando sleep para esperar que una variable que se define mediante jquery este lista, valido mientras la variable sea igual a nulll, realizo una espera de 100 ms.

Cita de: #!drvy en  5 Diciembre 2017, 21:12 PM
Pregúntate si realmente necesitas un sleep o lo puedes solventar de manera asíncrona.

Si puedo a hacerlo pero tendría que reescribir el código del lado del servidor y cambiar un poco el formato de las respuesta que este envía, esta solución me parece la mas "formal" y todo eso, solo quería evitar rescribir el código, pero por lo que veo terminare haciendo esto.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Izgah

La idea es cambiar una variable esperando una respuesta del servidor... y por qué no usar promesas?

AlbertoBSD

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

dfr4gm4

Hola.

Si te da error porque no reconoce el await o async es porque estás intentando usar ES6 directamente en el navegador, te recomiendo que uses webpack para generar tu código en ES5 y puedas servirlo en la mayoria de navegadores.

https://webpack.js.org/

Saludos.

EFEX

#6
Yo usaria el polyfill de Babel como en la respuesta de stackoverflow, no tengo como reproducir el codigo sin una maquina virtual, me da paja  :rolleyes:
GITHUB 

ivancea96

Y si en vez de hacer un sleep utilizas un setTimeout y metes el código que tengas que ejecutar luego dentro? Sería la forma de hacerlo, ya que el código debe ser asíncrono.