Quelque chose comme cela pourrait se faire:
var list = [1,2,3,4,5,6,7,8,9,10];
var timeFrame = 60000;
var interval = timeFrame/(list.length-1);
var i = 0;
(function iterate() {
if (list.length > i) {
console.log(list[i]);
i++;
}
setTimeout(iterate, interval);
})();
JsFiddle Demo
Je ne suis pas sûr si c'est ce que vous cherchez, mais cela va "itérer" à travers tous les éléments de la liste, sans utiliser for
boucle, dans le délai donné. La fonction s'appellera toujours en utilisant setTimeout
. Le délai d'expiration est calculé au début en fonction du nombre d'éléments. Cette solution est beaucoup plus "fiable" que setInterval
. Le prochain délai d'attente sera défini lorsque l'action précédente est déjà effectuée, de sorte qu'il ne sera pas empilé.
Pouvez-vous donner quelques informations générales sur ce que vous essayez d'accomplir? Pour prendre exactement une minute, cela dépend entièrement de ce que vous faites à chaque itération et de la durée d'une seule itération, ce qui peut être très difficile à réaliser. – Gerry
Assurez-vous également de ne pas mettre de code critique sur la mission, et ne supposez pas qu'il se déclenchera toujours comme prévu. Je ne suis pas sûr qu'il soit encore implémenté dans Chrome, mais les navigateurs peuvent optimiser l'utilisation des ressources lorsque votre page est sur un onglet en arrière-plan et peuvent finir par appeler vos minuteurs avec des intervalles plus longs. – DarthJDG