7
votes

Arrêter l'exécution de la fonction après une heure fixe dans JavaScript

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: xxx


0 commentaires

4 Réponses :


3
votes

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 settimeout ne soit jamais invoqué, donc redevable Ne deviendra jamais réglé, la boucle ne peut pas finir.

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.

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.


0 commentaires

1
votes

Count commence une boucle sans fin, votre code n'atteint jamais le SettimeOut ().


0 commentaires

1
votes

Trois questions:

  • Votre délai d'attente est prêt à tirer sur un milliseconde
  • Votre Settimeout n'est pas atteint car comptage ne finira jamais
  • Votre alerte doit être appelée à partir de l'intérieure compteur après le pendant ou à partir de la section settimeout rappel.

    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 .


0 commentaires

0
votes

Je ne sais pas quel est le but, mais vous devriez interrompre xxx pré>

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


0 commentaires