Exécution immédiate inattendue d'une fonction avec setTimeout
En tentant de planifier un appel de fonction à des intervalles spécifiques, l'utilisateur rencontre un problème où le setTimeout La fonction exécute la fonction immédiatement, malgré le délai d'attente spécifié. La fonction doRequest doit être appelée à intervalles de 10 secondes, mais elle est appelée immédiatement.
La cause de cette exécution immédiate réside dans la manière dont la fonction setTimeout est appelée. L'extrait de code suivant illustre le problème :
setTimeout(doRequest(url, proxys[proxy]), proxytimeout);
Dans ce code, la fonction doRequest est transmise comme premier argument à setTimeout, mais la fonction est exécutée immédiatement plutôt que planifiée.
Solutions :
Pour résoudre ce problème et garantir que doRequest est planifié, il existe trois façons alternatives d'utiliser setTimeout :
Transmettez le nom de la fonction sous forme de chaîne :
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
Utilisez un nom anonyme Fonction :
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
Transmettez d'abord le nom de la fonction, puis les paramètres :
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
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!