Execução assíncrona da função on-change com AngularJS

O evento ao alterar é incrível, mas quando você tem muitas coisas a fazer quando esse evento acontece (por exemplo, quando o usuário escreve algo em uma entrada) a GUI irá congelar como o inferno!

Eu escrevo uma diretiva para fazer esse trabalho de forma assíncrona:

https://github.com/institut-de-genomique/Ultimate-DataTable/blob/master/src/directives/udt-change.js

Eu uso a função $ interval angularjs (setInterval com $ apply no final) para controlar um tique. A cada tick, verifico se preciso executar a função.

Para executar a função no contexto certo, uso um observador que desabilito logo após sua execução.

O objetivo que tento alcançar é usar promessa para que a função não execute simultaneamente, mas por enquanto esta solução funciona bem.