Maison > interface Web > js tutoriel > Pourquoi ma fonction setTimeout() s'exécute-t-elle immédiatement, malgré la définition d'un délai ?

Pourquoi ma fonction setTimeout() s'exécute-t-elle immédiatement, malgré la définition d'un délai ?

Barbara Streisand
Libérer: 2024-11-14 18:33:01
original
533 Les gens l'ont consulté

Why is my setTimeout() function executing immediately, despite setting a delay?

Exécution retardée des appels de fonction avec setTimeout

En JavaScript, utiliser setTimeout() pour planifier l'exécution d'une fonction à une date ultérieure est une technique courante pour la programmation asynchrone. Cependant, il existe des cas où la fonction est exécutée immédiatement même si elle a été planifiée avec un retard. Comprendre les subtilités de setTimeout() est crucial pour une exécution asynchrone efficace.

Dans le contexte fourni, la fonction crawl() est destinée à appeler la fonction doRequest() à des intervalles d'environ 10 secondes. Cependant, la fonction est exécutée immédiatement.

La clé pour comprendre ce problème réside dans la syntaxe de setTimeout(). Lorsque vous fournissez une fonction en tant que paramètre, il est important de spécifier la fonction elle-même, suivie du délai, puis de tous les arguments requis par la fonction.

Solutions possibles :

  1. Fonction, délai et arguments :

    Appelez setTimeout() de la manière suivante :

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
    Copier après la connexion

    Cela garantit que doRequest() est passé comme fonction à exécuter, avec le délai et les arguments nécessaires.

  2. Fonction as String :

    Alternativement, vous pouvez passer doRequest () comme chaîne qui sera évaluée :

    setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);
    Copier après la connexion

    Cette approche nécessite moins de parenthèses et offre une alternative plus concise.

  3. Fonction anonyme avec fermeture :

    Enfermez doRequest() dans une fonction anonyme pour empêcher les changements d'arguments dans la boucle :

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);
    Copier après la connexion

    Cette technique garantit que les variables utilisées dans la fermeture restent cohérentes, même si la boucle progresse. Cependant, elle est légèrement plus complexe que les options précédentes.

En fonction de vos besoins spécifiques, chacune de ces solutions planifiera efficacement l'exécution de doRequest() avec le délai prévu. Comprendre les nuances de setTimeout() est essentiel pour réussir une programmation asynchrone en JavaScript.

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