removed scope.$apply
Calling $apply can still cause digest errors if $root.$$phase is not checked, but more importantly, it is an anti-pattern in Angular. Just calling $timeout seems to do the job.