Maison  >  Article  >  interface Web  >  Pourquoi ma fonction « setTimeout » s'exécute-t-elle immédiatement plutôt qu'à une heure planifiée ?

Pourquoi ma fonction « setTimeout » s'exécute-t-elle immédiatement plutôt qu'à une heure planifiée ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-12 13:40:01764parcourir

Why Is My `setTimeout` Function Executing Immediately Instead of at a Scheduled Time?

Pourquoi ma fonction n'est-elle pas planifiée par setTimeout qui s'exécute immédiatement ?

Votre code cherche à tester les serveurs proxy à l'aide de la fonction setTimeout pour appeler doRequest avec des intervalles de 10 secondes. Étrangement, les fonctions s'exécutent immédiatement au lieu de suivre le calendrier prévu.

Comprendre le problème

Le problème réside dans la façon dont vous transmettez la fonction doRequest à setTimeout. Lorsque vous spécifiez une fonction comme premier argument, comme dans setTimeout(doRequest(url, proxys[proxy]), proxytimeout), la fonction est invoquée immédiatement.

Solutions

Pour résoudre le problème, vous avez trois options :

  1. Transmettez les arguments en tant que paramètres distincts :

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
  2. Utiliser une expression de chaîne :

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
  3. Définir une fonction anonyme au sein d'une fermeture :

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);

La première option est préférée car elle est plus claire et plus explicite. La deuxième option est moins souhaitable en raison de sa nature « hackée », tandis que la troisième option peut être complexe à comprendre mais empêche les valeurs de changer au sein de la boucle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn