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:
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
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
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!
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
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!
La idea es cambiar una variable esperando una respuesta del servidor... y por qué no usar promesas?
Por compatibilidad con IE9
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.
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:
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.