Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: AlbertoBSD en 5 Diciembre 2017, 20:58 pm



Título: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: AlbertoBSD en 5 Diciembre 2017, 20:58 pm
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
  1. function sleep(ms) {
  2.    return new Promise(resolve => setTimeout(resolve, ms));
  3. }
  4.  

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
  1. function sleep(ms) {
  2.    tiempo = ms;
  3.    return new Promise(function(resolve) {
  4.        setTimeout(function() {
  5.            resolve("result");
  6.        }, tiempo);
  7.    });
  8. }
  9.  
  10.  

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
  1.      function sleep(delay) {
  2.        var start = new Date().getTime();
  3.        while (new Date().getTime() < start + delay);
  4.      }
  5.  

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

Alguno de ustedes tiene algo de experiencia con esto.

Saludos!


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: #!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.

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

Saludos


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: AlbertoBSD en 5 Diciembre 2017, 21:27 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.

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!


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: Izgah en 14 Diciembre 2017, 12:18 pm
La idea es cambiar una variable esperando una respuesta del servidor... y por qué no usar promesas?


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: AlbertoBSD en 9 Enero 2018, 05:53 am
Por compatibilidad con IE9


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: dfr4gm4 en 12 Enero 2018, 13:54 pm
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.


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: EFEX en 12 Enero 2018, 16:10 pm
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:


Título: Re: Alguna solucion para realizar sleep en IE9 o IE11? sin promesas?
Publicado por: ivancea96 en 12 Enero 2018, 17:26 pm
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.