9
votes

Downscore Thoutle + Assurez-vous que le dernier appel

Un trait de soulignement fournit la méthode, papillon. De leurs documents:

crée et renvoie une nouvelle version étranglée de la fonction transcédée, qui, lorsqu'elle est appelée à plusieurs reprises, n'appellera que la fonction d'origine au plus une fois par millisecondes d'attente. Utile pour les événements limitant les taux qui se produisent plus rapidement que vous pouvez suivre.

Imaginez maintenant le cas d'une forme automatique. Cela signifie que si "ABC" est typée dans une fenêtre de 100 ms, disons, alors une recherche "A 'sera envoyée et non" BC ".

Est-ce une surveillance drastique de la part des sous-traitants.js? Que suggéreriez-vous comme une solution propre?


0 commentaires

5 Réponses :


0
votes

Oui, vous avez raison de ne pas fonctionner bien pour une forme automatique. Je pense que cela signifie que d'autres types de choses, cependant. L'exemple donné est la manipulation des événements de défilement.


0 commentaires


5
votes

1 commentaires

Belle solution, +1. Néanmoins, je ne l'ajouterais pas à l'objet _ car cela peut confondre une personne qui lit votre code. "Cette méthode a été cette méthode à partir d'une version plus ancienne du soulignement? Est-ce un LO-Dash extension?"



4
votes

ah, je n'ai pas lu les documents à droite! Là est em> une fonction pour cela.

var test = _.debounce(function() { console.log('foo'); }, 3000);


1 commentaires

Bien que cela semble fonctionner dans ce cas d'utilisation, le débutant et la manette des gaz donnent un comportement différent. Je cherche un moyen de garder les demandes à traverser tout en tapant, mais assurez-vous toujours le dernier appel (comme dans la question ici).



0
votes

On dirait que les autres réponses mentionnent à l'aide de débutant au lieu de manetteries. J'ai trouvé une solution qui vous permet de garder le comportement des gaz d'accélérateur (garder les appels de fonction à travers) tout en assurant le dernier appel.

https://gist.github.com/ayushv512/a2f963bface38f5e2f6f6bba39bba9b9#file-throttle-js p>

 const throttle = (func, limit) => {
  let lastFunc;
  let lastRan;
  return function() {
    const context = this;
    const args = arguments;
    if (!lastRan) {
      func.apply(context, args)
      lastRan = Date.now();
    } else {
      clearTimeout(lastFunc);
      lastFunc = setTimeout(function() {
          if ((Date.now() - lastRan) >= limit) {
            func.apply(context, args);
            lastRan = Date.now();
          }
       }, limit - (Date.now() - lastRan));
    }
  }
}


0 commentaires