处理Angular中的非幂等$ http请求

时间:2015-03-11 20:58:23

标签: javascript angularjs angular-promise

我无法在整个应用程序中概念化如何从非幂等请求建模/访问数据。

作为一个例子,我们说我有一个API,它返回一个供用户查看的随机作者。我需要在应用程序的不同位置显示有关此作者的信息,然后偶尔我需要重新调用getNext方法以获取下一个随机作者,并更新应用程序中的所有绑定。

我有以下工厂:

.factory('author', function($http) {
    return {
        data: {},
        getNext: function() {
            return $http.get('/path/to/endpoint').then(function(res) {
                angular.copy(res.data, this.data)
                return res;
            }.bind(this));  
    };    
});

然后在我的控制器中,我只是恰当地绑定我的数据:

.controller('MainCtrl', function($scope, author) {
    $scope.author = author.data;

    author.getNext();
});

在我的视图中渲染数据:

<h2>{{author.name}}</h2>
<div ng-repeat="book in author.books">
    {{book.title}} - {{book.year}}
</div>

这样可行,但是将新对象复制到旧对象以获取触发更新感觉不仅仅是一件小事。

更重要的是,我无法访问getNext在任何其他控制器中生成的承诺,而不是我最初称之为的承诺。我想要做的是{{1成为被调用的最后一个data承诺。这意味着如果我调用新的getNextgetNext将成为新的承诺,并且所有data将在加载时重新执行。

可能.then需要data才能解决?

1 个答案:

答案 0 :(得分:1)

我不会将'author'服务作为作者实体,我只是将其用作DAO。

.factory('Author', function($http) {
    function AuthorService(){
        this.getNext = function(){
            return $http.get('/path/to/endpoint').then(function(res) {
                return res.data; 
            })
        } 
    }; 
    return new AuthorService()   
});

.controller('MainCtrl', function($scope, Author) {
      Author.getNext().then(function(author){
         $scope.author = author
      });
});