Maison  >  Article  >  interface Web  >  Pourquoi ma fonction « setTimeout » est-elle exécutée immédiatement plutôt qu'après le délai ?

Pourquoi ma fonction « setTimeout » est-elle exécutée immédiatement plutôt qu'après le délai ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-15 17:04:02602parcourir

Why is my `setTimeout` function being executed immediately instead of after the delay?

Pourquoi l'exécution immédiate de la fonction planifiée setTimeout se produit

Dans ce scénario, où une fonction est destinée à être exécutée avec un délai à l'aide de setTimeout mais est à la place exécutée immédiatement, le problème réside dans la façon dont la fonction est transmise à setTimeout.

Pour résoudre ce problème, il existe trois approches pour garantir qu'elle s'exécute avec le délai souhaité :

  1. Transmettre les arguments individuellement :

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

    Ce formulaire transmet d'abord la fonction, suivi du délai d'attente et des arguments de la fonction.

  2. Utilisez un Chaîne littérale :

    setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);

    Ici, une chaîne littérale est fournie, qui sera évaluée au moment de l'exécution.

  3. Fermeture de fonction anonyme :

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

    Cette approche implique une fonction anonyme qui appelle la fonction prévue. La fermeture garantit que les valeurs utilisées dans la fonction restent cohérentes tout au long de la boucle.

En adoptant l'une de ces méthodes, vous pouvez planifier efficacement l'exécution de la fonction doRequest avec le délai spécifié.

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