Retarder les appels multifonctions à l'aide d'étiquettes
C'est la solution avec laquelle je travaille. Cela retardera l'exécution sur TOUTE fonction que vous souhaitez . Il peut s'agir de la requête de recherche par enfoncement, peut-être du clic rapide sur les boutons précédent ou suivant (qui autrement enverrait plusieurs demandes si on cliquait rapidement en continu et ne serait pas utilisé après tout). Celui-ci utilise un objet global qui stocke chaque heure d'exécution et le compare à la demande la plus récente.
Le résultat est donc que seul ce dernier clic / action sera réellement appelé, car ces demandes sont stockées dans une file d'attente, qu'après les X millisecondes est appelée si aucune autre demande avec le même label n'existe dans la file d'attente!
function delay_method(label,callback,time){
if(typeof window.delayed_methods=="undefined"){window.delayed_methods={};}
delayed_methods[label]=Date.now();
var t=delayed_methods[label];
setTimeout(function(){ if(delayed_methods[label]!=t){return;}else{ delayed_methods[label]=""; callback();}}, time||500);
}
Vous pouvez définir votre propre temps de retard (optionnel, 500 ms par défaut). Et envoyez vos arguments de fonction de façon "fermée".
Par exemple, si vous souhaitez appeler la fonction ci-dessous:
function send_ajax(id){console.log(id);}
Pour empêcher plusieurs demandes send_ajax, vous les retardez en utilisant:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Chaque demande qui utilise le libellé "date de vérification" ne sera déclenchée que si aucune autre demande n'est effectuée dans le délai de 600 millisecondes. Cet argument est facultatif
Indépendance des étiquettes (appelant la même fonction cible) mais exécutez les deux:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Entraîne l'appel de la même fonction mais les retarde indépendamment car leurs étiquettes sont différentes