1

Ich verstehe, dass debounce in Undercore.js eine Funktion zurückgibt, die ihre Ausführung verzögert, bis die Wartezeit vorbei ist.Underscore debounce vs Vanille Javascript setTimeout

Meine Frage ist, gibt es einen Vorteil der Verwendung von debounce über die normale setTimeout Funktion in Vanille Javascript? Arbeiten sie nicht beide gleich?

+1

Sie sind * deutlich * anders. Ich schlage vor, dass Sie die Dokumentation erneut lesen: http://underscorejs.org/#debounce (und beachten Sie, dass [debunce nutzt setTimeout unter der Haube] (https://github.com/jashkenas/underscore/blob/012fe2b77e3d206d763c0c078d3b97a63639fc24/undscore.js#) L855)) – Quentin

Antwort

5

Sie sind sehr unterschiedlich und in ganz anderen Fällen verwendet.

  1. _.debounce gibt einen function, setTimeout gibt ein id, die Ihnen die timeOut abbrechen können.

  2. Egal, wie oft Sie die Funktion aufrufen, die von _.debounce zurückgegeben wird, sie wird nur einmal im angegebenen Zeitrahmen ausgeführt.

var log_once = _.debounce(log, 5000); 
 

 
function log() { 
 
    console.log('prints'); 
 
} 
 

 
log_once(); 
 
log_once(); 
 
log_once(); 
 
log_once(); 
 
log_once(); 
 

 
var id = setTimeout(function() { 
 
    console.log('hello'); 
 
}, 3000); 
 
clearTimeout(id);

+0

Nur FYI, [** Diese Vanilla 'debounce' **] (https://github.com/JDMcKinstry/debounce) Methode gibt das Timeout zurück, so dass Sie es manuell abbrechen können, wenn Sie auch wählen. – SpYk3HH

2

setTimeout und debounce sind in keiner Weise das Gleiche. setTimeout wartet einfach n Millisekunden und ruft die angegebene Funktion auf. debounce gibt dagegen eine Funktion zurück, die den Rückruf erst nach n Millisekunden nach dem letzten Aufruf der Funktionen aufruft.

Großer Unterschied. Entprellen/Drosselung (sie sind nicht dasselbe) Funktionen werden oft verwendet, um die Anzahl von Funktionsaufrufen als Folge von Benutzereingaben zu reduzieren. Stellen Sie sich ein Autocomplete-/Typeahead-Feld vor. Sie können eine Ajax-Anfrage bei jedem Tastendruck machen, aber das kann ziemlich schwer werden, also können Sie die Funktion entprellen, so dass nur 200ms nach der letzte Tastendruck ausgelöst wird.

Sie können hier auf die Dokumentation nachlesen: https://lodash.com/docs#debounce