Skip to content

Instantly share code, notes, and snippets.

@adamalbrecht
Last active December 9, 2022 20:16
Show Gist options
  • Save adamalbrecht/7226278 to your computer and use it in GitHub Desktop.
Save adamalbrecht/7226278 to your computer and use it in GitHub Desktop.
Simple debounce function for Angular.js found at the link below and slightly tweaked. http://plnkr.co/edit/fJwRER?p=info
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
angular.module('ngDebounce', []).factory('$debounce', function($timeout, $q) {
return function(func, wait, immediate) {
var timeout;
var deferred = $q.defer();
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if(!immediate) {
deferred.resolve(func.apply(context, args));
deferred = $q.defer();
}
};
var callNow = immediate && !timeout;
if ( timeout ) {
$timeout.cancel(timeout);
}
timeout = $timeout(later, wait);
if (callNow) {
deferred.resolve(func.apply(context,args));
deferred = $q.defer();
}
return deferred.promise;
};
};
});
@dubilla
Copy link

dubilla commented Feb 12, 2016

Awesome! Do you host this anywhere? It would be nice to be able to pull in with Bower.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment