The underscore library provides a debounce function that prevents multiple calls to a function within a set period of time. Their version makes use of setTimeout.
H
https://github.com/capaj/ng-tools/blob/master/src/debounce.js
usage:
app.directive('autosavable', function(debounce) {
return {
restrict : 'A',
require : '?ngModel',
link : function(scope, element, attrs, ngModel) {
var debounced = debounce(function() {
scope.$broadcast('autoSave');
}, 5000, false);
element.bind('keypress', function(e) {
debounced();
});
}
};
});