Maison > interface Web > js tutoriel > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-12 13:40:01
original
765 Les gens l'ont consulté

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]);
    Copier après la connexion
  2. Utiliser une expression de chaîne :

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
    Copier après la connexion
  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);
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal