I can't speak for the OP, but we abstracted the inner workings of the $resource away by putting them into a service and wrapping every resource call in $q. Something like this:
function doSomething(){
var defObj = $q.defer();
var Promise = myResource.query();
Promise.$promise.then(function(data){
defObj.resolve(data);
});
return defObj.promise;
}
The end call in the controller (directive, filter, other service) just has to deal with a promise to resolve.
var serviceResult = myService.getSomething();
serviceResult.then(function(data){
myVar = data;
});
It may not be what you are looking for, but it works for us.