web-dev-qa-db-fra.com

Appeler une fonction toutes les 60 secondes

En utilisant setTimeout(), il est possible de lancer une fonction à une heure précise:

setTimeout(function, 60000);

Mais que se passe-t-il si je souhaite lancer la fonction plusieurs fois? Chaque fois qu'un intervalle de temps est écoulé, j'aimerais exécuter la fonction (toutes les 60 secondes, par exemple).

205
Richard Knop

Si vous ne vous souciez pas de savoir si le code dans la timer peut durer plus longtemps que votre intervalle, utilisez setInterval():

setInterval(function, delay)

Cela déclenche la fonction transmise comme premier paramètre à plusieurs reprises.

Une meilleure approche consiste à utiliser setTimeout avec une fonction self-executing anonymous:

(function(){
    // do some stuff
    setTimeout(arguments.callee, 60000);
})();

cela garantit que le prochain appel ne sera pas fait avant que votre code ait été exécuté. J'ai utilisé arguments.callee dans cet exemple comme référence de fonction. C'est un meilleur moyen de donner un nom à la fonction et de l'appeler dans setTimeout car arguments.callee est obsolète dans ecmascript 5.

326
jAndy

utilisez le

setInterval(function, 60000);

EDIT: (Au cas où vous voudriez arrêter l'horloge après son démarrage)

Section de script

<script>
var int=self.setInterval(function, 60000);
</script>

et code HTML

<!-- Stop Button -->
<a href="#" onclick="window.clearInterval(int);return false;">Stop</a>
59
BlueBird

Une meilleure utilisation de jAndy 's answer pour implémenter une fonction d'interrogation qui interroge toutes les interval secondes et prend fin après timeout secondes.

function pollFunc(fn, timeout, interval) {
    var startTime = (new Date()).getTime();
    interval = interval || 1000;

    (function p() {
        fn();
        if (((new Date).getTime() - startTime ) <= timeout)  {
            setTimeout(p, interval);
        }
    })();
}

pollFunc(sendHeartBeat, 60000, 1000);

METTRE &AGRAVE; JOUR

Selon le commentaire, le mettre à jour pour que la fonction transmise puisse arrêter l'interrogation:

function pollFunc(fn, timeout, interval) {
    var startTime = (new Date()).getTime();
    interval = interval || 1000,
    canPoll = true;

    (function p() {
        canPoll = ((new Date).getTime() - startTime ) <= timeout;
        if (!fn() && canPoll)  { // ensures the function exucutes
            setTimeout(p, interval);
        }
    })();
}

pollFunc(sendHeartBeat, 60000, 1000);

function sendHeartBeat(params) {
    ...
    ...
    if (receivedData) {
        // no need to execute further
        return true; // or false, change the IIFE inside condition accordingly.
    }
}
22
Om Shankar

Dans jQuery, vous pouvez faire comme ça.

function random_no(){
     var ran=Math.random();
     jQuery('#random_no_container').html(ran);
}
           
window.setInterval(function(){
       /// call your function here
      random_no();
}, 6000);  // Change Interval here to test. For eg: 5000 for 5 sec
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="random_no_container">
      Hello. Here you can see random numbers after every 6 sec
</div>

11
Optimum Creative
setInterval(fn,time)

est la méthode que vous recherchez.

8
Jamiec

Vous pouvez simplement appeler setTimeout à la fin de la fonction. Cela l'ajoutera à nouveau à la file d'attente des événements. Vous pouvez utiliser n'importe quel type de logique pour faire varier les valeurs de délai. Par exemple,

function multiStep() {
  // do some work here
  blah_blah_whatever();
  var newtime = 60000;
  if (!requestStop) {
    setTimeout(multiStep, newtime);
  }
}
6
John Henckel
// example:
// checkEach(1000, () => {
//   if(!canIDoWorkNow()) {
//     return true // try again after 1 second
//   }
//
//   doWork()
// })
export function checkEach(milliseconds, fn) {
  const timer = setInterval(
    () => {
      try {
        const retry = fn()

        if (retry !== true) {
          clearInterval(timer)
        }
      } catch (e) {
        clearInterval(timer)

        throw e
      }
    },
    milliseconds
  )
}
1
srghma

ici nous console les nombres naturels 0 à ...... n (le nombre suivant est imprimé dans la console toutes les 60 secondes), en utilisant setInterval ()

var count = 0;
function abc(){
    count ++;
    console.log(count);
}
setInterval(abc,60*1000);
0
vijay sadhu