Czy usługi powinny ujawniać ich asynchroniczność?

Piszę usługę, która będzie pobierać dane asynchronicznie ($ http lub $ resource). Mogę ukryć fakt, że jest asynchroniczny, zwracając tablicę, która początkowo będzie pusta, ale w końcu zostanie wypełniona:

.factory('NewsfeedService1', ['$http', function($http) {
   var posts = [];
   var server_queried = false;
   return {
      posts: function() {
         if(!server_queried) {
            $http.get('json1.txt').success(
              function(data) {
                server_queried = true;
                angular.copy(data, posts);
            });
         }
         return posts;
      }
   };
}])
.controller('Ctrl1', ['$scope','NewsfeedService1',
function($scope, NewsfeedService1) {
    $scope.posts = NewsfeedService1.posts();
}])

Albo mogę ujawnić asynchroniczność, zwracając obietnicę:

.factory('NewsfeedService2', ['$http', function($http) {
  var posts = [];
  var server_queried = false;
  var promise;
  return {
     posts_async: function() {
       if(!promise || !server_queried) {
         promise = $http.get('json2.txt').then(
           function(response) {
              server_queried = true;
              posts = response.data;
              return posts;
         });
       }
       return promise;
     }
  };
}])

.controller('Ctrl2', ['$scope','NewsfeedService2',
function($scope, NewsfeedService2) {
  NewsfeedService2.posts_async().then(
    function(posts) {
      $scope.posts = posts;
  });
  // or take advantage of the fact that $q promises are
  // recognized by Angular's templating engine:
  // (note that Peter and Pawel's AngularJS book recommends against this, p. 100)
  $scope.posts2 = NewsfeedService2.posts_async();
}]);

(Plunker - jeśli ktoś chce się pobawić powyższymi dwoma implementacjami.)

Jedną z potencjalnych zalet ujawnienia asychroniczności byłoby to, że mogę poradzić sobie z błędami w kontrolerze, dodając procedurę obsługi błędów dothen() metoda. Jednak najprawdopodobniej będę łapać i obsługiwać błędy $ http w całej aplikacjiprzechwytujący.

Kiedy więc ujawnić asynchroniczność usługi?

questionAnswers(3)

yourAnswerToTheQuestion