I'm guessing that it's a synchronous issue because the $timeout service returns a promise whereas the non-timeout version returns a string.

You could "wait" and then return the string.