100 votes

Que se passe-t-il avec setTimeout lorsque l'ordinateur passe en veille ?

Dans un navigateur web moderne, supposons que je fasse un setTimeout pour 10 minutes (à 12h00), et que 5 minutes plus tard je mette l'ordinateur en veille, que devrait-il se passer lorsque le système se réveille à nouveau? Que se passe-t-il s'il se réveille avant les 10 minutes (à 12h09) ou beaucoup plus tard (à 16h00)?

La raison pour laquelle je pose cette question est que j'aimerais demander un nouveau jeton d'authentification toutes les 10 minutes, et je ne suis pas sûr si le navigateur fera ce qu'il faut et demandera immédiatement un nouveau jeton s'il se réveille après un long moment.

Clarifications: Je ne veux pas utiliser de cookies - j'essaie de construire un service web ici; et oui, le serveur rejettera les jetons anciens et invalides.

5voto

Erez Cohen Points 190

Basé sur la réponse de Ben, j'ai créé l'utilitaire suivant. Vous pouvez ajuster la durée d'échantillonnage, mais je l'utilise juste comme ça pour rafraîchir les jetons :

const absoluteSetInterval = (handler, timeout) => {
  let baseTime = Date.now();
  const callHandler = () => {
    if (Date.now() - baseTime > timeout) {
      baseTime = Date.now();
      handler();
    }
  };
  return window.setInterval(callHandler, 1000);
};

const absoluteClearInterval = (handle) => window.clearInterval(handle);

-3voto

Evgeny Shadchnev Points 3560

Dans le blog de John Resig, il est dit que les temporisateurs utilisent l'horloge murale. Je crois que les événements se déclencheront immédiatement après la reprise de la machine car setTimeout() ne garantit pas qu'une exécution se fera à un moment précis mais dès que possible après l'intervalle spécifié. Cependant, je ne l'ai pas vérifié moi-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X