$evalAsync() does not necessarily guarantee execution within a timer; the provided function may well execute after the current $digest loop without control returning to the browser. If we need a timer to ensure focus() behaves reliably, we should explicitly use one via $timeout.