Puede realizar una función anónima y llamarla de inmediato, excepto que utiliza la función setTimeout en lugar de setInterval.
(function doStuff() {
//Do Stuff Here
setTimeout(doStuff,20000);
})();
Esto ejecutará la función y luego la volverá a llamar en 20 segundos.
Tenga en cuenta que, dependiendo del comportamiento que desee o, en algunos casos, del rendimiento, puede ser mejor utilizar setTimeout en setInterval. La principal diferencia es que setInterval llama a esa función cada vez que se agota el tiempo de espera, INDEPENDIENTEMENTE si la última llamada ha terminado de ejecutarse o si se produce un error. Usar setTimeout es que esta moda asegura que la función termine su ejecución antes de que el temporizador se reinicie. Muchas de las compensaciones son bastante evidentes, pero es algo bueno a tener en cuenta al diseñar su aplicación.
EDIT En respuesta a la preocupación de patrick dw sobre la necesidad de cancelar el tiempo de espera.La mejor solución es no utilizar la función anónima, y simplemente llamarlo después de la declaración
var timeout;
function doStuff() {
//doStuff
timeout = setTimeout(doStuff,20000);
}
doStuff()
Sí esto es similar a lo que el PO estaba tratando de evitar, pero no elimina la necesidad de llamar a la función y luego llamar la función setInterval, por lo que guarda una línea de código. Puede detener e iniciar la función en cualquier momento por:
//Stop it
clearTimeout(timeout);
//Start it
doStuff();
Información importante. ¡Gracias! – Andrew