Fixing _.throttle() to only execute once if called once. #170 comments.

This commit is contained in:
Jeremy Ashkenas
2011-10-24 16:16:18 -04:00
parent e8ec62c894
commit 29f4478a86
2 changed files with 24 additions and 4 deletions

View File

@@ -523,17 +523,21 @@
// Returns a function, that, when invoked, will only be triggered at most once
// during a given window of time.
_.throttle = function(func, wait) {
var context, args, timeout, throttling;
var whenDone = _.debounce(function(){ throttling = false; }, wait);
var context, args, timeout, throttling, more;
var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
return function() {
context = this; args = arguments;
var later = function() {
timeout = null;
func.apply(context, args);
if (more) func.apply(context, args);
whenDone();
};
if (!timeout) timeout = setTimeout(later, wait);
if (!throttling) func.apply(context, args);
if (throttling) {
more = true;
} else {
func.apply(context, args);
}
whenDone();
throttling = true;
};