2 votes

Empêcher la ré-entrée de JavaScript Timer

Ma page ASP.NET MVC utilise JavaScript/jQuery pour interroger ma base de données toutes les secondes.

Cela fonctionne, mais je veux m'assurer que, s'il y a un retard, mon gestionnaire de temporisation ne sera pas appelé à nouveau avant qu'il ne soit revenu.

Existe-t-il une astuce autre que le stockage de l'ID de la minuterie dans une variable globale, l'effacement de la minuterie dans mon gestionnaire, et son redémarrage lorsque mon gestionnaire est terminé.

NOTE : Je réalise que chaque seconde semble fréquente mais ce code interroge mon serveur après avoir soumis un paiement par carte de crédit. Normalement, il ne s'exécute que pendant une seconde environ, et je ne veux pas que l'utilisateur attende plus longtemps que nécessaire.

5voto

Rob W Points 125904

Un sondage toutes les secondes ? C'est assez lourd !

Cela dit, vous n'aurez pas ce problème lorsque setTimeout est utilisé à la place de setInterval . Ce dernier garantit qu'un morceau de code est exécuté x fois compte tenu d'un intervalle, tandis que le premier garantit qu'il y a un délai d'au moins x millisecondes.

function some_poller() {
    $.ajax({
       url: '/some_page',
       success: function() {
           setTimeout(some_poller, 1000);
       },
       error: function() { // Also retry when the request fails
           setTimeout(some_poller, 1000);
       }
    });
}

// Init somewhere
some_poller();

1voto

Scott Sauyet Points 4228

Pas vraiment, bien que je ne recommande pas l'utilisation d'une variable globale. Placez-la dans une fonction.

Mais êtes-vous vraiment sûr que vous avez besoin de sonder chaque seconde ? C'est une interface extrêmement bavarde.

0voto

Jlange Points 2396

D'après mon expérience personnelle, une variable "globale" (à l'intérieur de la fonction Root) fonctionne très bien dans ce cas, afin que vous puissiez contrôler le moment de l'effacement et du redémarrage. Si la réponse est vraiment aussi rapide que vous le dites, cela ne devrait pas causer trop de surcharge (effacement/réinitialisation) et permettra de tenir compte de ce type de situations.

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