This is in fact the only way I managed it to work. Resolving a promise inside the controller is impossible, given that the controller is not instanciated until the promise is resolved......
So the main point is that you can use any injected function as the value of a resolve, using your services too.
This is the way I have done it:
$routeProvider.when "some/route"
templateUrl: "some/url.html"
controller: "SomeController"
resolve:
myServiceLoaded: ["myService", (svc) -> svc.lockDefer.promise]
and in the service
module.factory "myService", ["$q", (q) ->
@lockDefer = q.defer()
# now load something...
$resource('/user/:userId').query ->
@lockDefer.resolve true
So the lockDefer deferred is unlocked in the service as soon as the data is ready. Using the composability of promises, you can resolve the lock for that services after any set of other promises have returned, allowing to load a bunch of data before your app is ready.