El servicio AngularJS devuelve undefined

Tengo el siguiente servicio:

app.services.emailService = ['$http', '$sce', function ($http, $sce) { return { getMessage: function(messageId, callback) { $http.get('/api/email/inbox' + '/' + messageId).then(function(response) { response.data.message.updated_at = new Date(response.data.message.updated_at.replace(/-/g,"/")); response.data.message.body = $sce.trustAsHtml(response.data.message.body); return response.data; }); } }; }]; 

En mi controlador, estoy asignando el valor de retorno a un $scope.message var para que pueda mostrar en el extremo delantero.

$scope.message no está definido

 $scope.getMessage = function(messageId) { $scope.message = emailService.getMessage($scope.messages[messageId].id); console.log($scope.message); } 

Su función getMessage no tiene statement de devolución. Pero $ http es asíncrono por lo que devolverá una promesa .

 app.services.emailService = ['$http', '$sce', function ($http, $sce) { return { getMessage: function(messageId, callback) { var deferred = $q.defer(); $http .get('/api/email/inbox' + '/' + messageId) .then(function () { response.data.message.updated_at = new Date(response.data.message.updated_at.replace(/-/g,"/")); response.data.message.body = $sce.trustAsHtml(response.data.message.body); deferred.resolve(response.data); }) .catch(function (e) { deferred.reject(e); ); return deferred.promise; } }; }]; 

Y en tu mando

 $scope.getMessage = function(messageId) { emailService .getMessage($scope.messages[messageId].id) .then(function (message) { $scope.message = message; console.log(message); }); } 

Si desea limpiar su respuesta en el servicio de correo electrónico, debe declarar sus propias promesas.