Je dois laisser une fonction fonctionner pour un nombre fixe de secondes, puis terminer. Je pourrais utiliser jQuery ou travailleurs Web, mais ma tentative de le faire directement échec.
tks pour l'aide Cela fonctionne maintenant: p>
4 Réponses :
Votre méthode proposée ne fonctionne pas car JavaScript est (principalement) à un seul filetage - La boucle démarre dans une boucle infinie, de sorte que le gestionnaire Il serait plus simple de déterminer une heure absolue à laquelle la fonction est de finition et de chacun (c'est-à-dire pas sur chaque itération), vérifiez si l'heure actuelle a passé ce point. P>
Choisissez un certain nombre d'itérations qui vous donnent un compromis raisonnable entre l'efficacité du test du temps écoulé et la quantité de «heures supplémentaires» que vous êtes prêt à laisser la fonction. p> settimeout code> ne soit jamais invoqué, donc
redevable Code> Ne deviendra jamais réglé, la boucle ne peut pas finir. p>
Count commence une boucle sans fin, votre code n'atteint jamais le SettimeOut (). P>
Trois questions: P>
Settimeout code> n'est pas atteint car comptage code> ne finira jamais li>
- Votre alerte
code> doit être appelée à partir de l'intérieure compteur code> après le pendant code> ou à partir de la section settimeout code> rappel. li>
ul>
Adressez ces problèmes et votre code devrait fonctionner. Néanmoins, j'aurais peut-être pu continuer à fixer une date de fin à l'avant et à comparer à cette date dans le pendant code>. P>
Je ne sais pas quel est le but, mais vous devriez interrompre pendant un certain temps pour donner une chance pour retenir code> pour changer d'autre endroit qui court entre-temps. De plus, vous ne faites jamais ceci: p>
var piece_n=0;
var keepGoing = true;
var interval_id = setInterval(function () {
if(keepGoing){
//do_a_short_piece_of_work(piece_n);
piece_n++;
}else{
clearInterval(interval_id);
}
},500); //ticking every half second
setTimeout(function () { keepGoing = false; }, 10000); //run for a small bit more than 10 to 10.5 seconds + do_a_short_piece_of_work() execution time