Throttle-сервис для AngularJS

Часто нужно вызывать функцию не по возникновению события, а после некоторой задержки, и не чаще, чем раз в какое-то время. Для этого используются throttle и debounce.

Throttle

throttle

Debounce

debounce

Более подробно о том, что это такое и как реализовать его на jquery — http://benalman.com/projects/jquery-throttle-debounce-plugin/ (тут он всегда живой — https://web.archive.org/web/20170205101542/http://benalman.com/projects/jquery-throttle-debounce-plugin/).
Мне такой понадобился для AngularJS.
Представляю на суд общественности мой angular-сервис.
Сам сервис — https://gist.github.com/bullgare/61058663e0230461b51d, пример использования:
http://jsbin.com/OyUxUduY/3/edit?html,output.
JS Bin
Дополнения приветствуются. Это неокончательный вариант, сделан на быструю руку, но меня пока полностью устраивает.

Debounce + Throttle:
https://gist.github.com/bullgare/4ec0af4b56fb535ef724

One Response so far.

  1. just-boris:
    Если использовать $timeout, то можно обойтись и без $scope.$apply, вот переделанный пример: http://jsbin.com/IwUvITU/1/edit?html,js,output
    Еще я бы поработал над механизмом сохранения активных таймеров, там есть повторяющиеся куски, можно их упростить

LEAVE A COMMENT