Intentando hacer un método delay en JS

xMarston

El caso es que he creado está función para hacer un efecto delay y de hecho la función se ejecuta correctamente pero claro, se ejecuta está función y las siguientes líneas de código también con lo cuál no sirve de nada. ¿Alguna solución? Y no quiero usar jQuery.

var date_for_loading = ""; 
function loading(){
	if(date_for_loading == ""){
		date_for_loading = new Date();//si está vacía la variable creo una nueva fecha para comprobar
	}
	
var actual_date = new Date();//creo una fecha
var actual_seconds = actual_date.getSeconds();//consigo los segundos actuales
var seconds = date_for_loading.getSeconds();//consigo los segundos de cuando se ha iniciado la función

if(actual_seconds != (seconds+5)){//si los segundos actuales son diferentes a los segundos de la fecha inicial más 5 que se llame así misma la función cada segundo
	setTimeout(function(){loading()}, 1000);
}else{
	date_for_loading == "";//cuando termine que vacíe la variable
}
}

Muchas gracias.

MTX_Anubis

No soy un experto en Javascript pero juraría que setTimeout es asíncrono lo que significa que no bloquea el flujo.

Por otro lado si lo que quieres esperar es 5 segundos no tendría más sentido hacer solo:

setTimeout(function, 5000);

y la función que le pases que sea lo que quieres hacer una vez terminen esos 5 segundos.

Si quieres algo como un delay pues te servería algo así:

function delay(miliseconds) {
  var init = new Date().getTime();
  var current = init;
  while (current - init < miliseconds) {
    current = new Date().getTime();
  }
}

Pero vamos ya te digo que no es la manera correcta de hacerlo en javascript.

1

Usuarios habituales

  • MTX_Anubis
  • xMarston