Tenga en cuenta que setTimeout()
no genera nuevos subprocesos. Las secuencias de comandos del lado del navegador no son solo de un solo subproceso, sino que la evaluación de JavaScript comparte el mismo subproceso con la representación de página (Web Workers aparte).
Más información:
Es posible que desee construir un gestor de temporizador de sí mismo:
var timerManager = (function() {
var timers = [];
return {
addTimer: function (callback, timeout) {
var timer, that = this;
timer = setTimeout(function() {
that.removeTimer(timer);
callback();
}, timeout);
timers.push(timer);
return timer;
},
removeTimer: function (timer) {
clearTimeout(timer);
timers.splice(timers.indexOf(timer), 1);
},
getTimers: function() {
return timers;
}
};
})();
A continuación, utilice la siguiente manera:
var t1 = timerManager.addTimer(function() {
console.log('Timer t1 triggered after 1 second');
}, 1000);
var t2 = timerManager.addTimer(function() {
console.log('Timer t2 triggered after 5 second');
console.log('Number of Timers at End: ' + timerManager.getTimers().length);
}, 5000);
console.log('Number of Timers at Start: ' + timerManager.getTimers().length);
Lo anterior se mostrará el siguiente resultado en la consola:
// Number of Timers at Start: 2
// Timer t1 triggered after 1 second
// Timer t2 triggered after 5 second
// Number of Timers at End: 0
Tenga en cuenta que la aplicación timerManager
anterior utiliza el método Array.indexOf()
. Esto ha sido agregado en JavaScript 1.6 y, por lo tanto, no implementado por todos los navegadores. Sin embargo, puede agregar el método fácilmente agregando la implementación desde this Mozilla Dev Center article.
Mike, por favor, ¿puede agregar más detalles? –
¿desea que solo se ejecute una lista de id de tiempo de espera? javascript no usa hilos ... – brad