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
Support for this has landed in angularjs#1.3.0.beta6 if you're dealing with a model interaction.
https://docs.angularjs.org/api/ng/directive/ngModelOptions