如何确保AngularJS中只有一个请求同时发送

时间:2015-05-22 21:41:59

标签: angularjs service singleton

所有

我想知道是否有人可以向我展示一些最佳实践来设计一个服务来执行http请求,该请求只允许在所有请求完成之前发出请求(有点像如何实现单例工作模式)

现在,我想的是设计一个服务,它有一个指示变量来显示这项服务的当前状态,但我觉得这很糟糕:

var app = angular.module("testsingletask", []);

app.directive("datafetcher", function($http){

    this.idle = true;
    this.getdata = function(dataurl){

        var self = this;
        var datapromise = null;
        if(self.idle){
            datapromise = $http.get(dataurl)
                 .then(function(data){
                     self.idle = true;
                     return data;
                 }, function(error){
                     self.idle = true;
                     return error;
                 });
        } // end of if block
        return datapromise;

    } // end of this.getdata

});

我们使用它的方式如下:

var data = datafetcher.getdata("dataurl");
if(data){
    data.then(function(return_data){}, function(return_err){});
}

由于

1 个答案:

答案 0 :(得分:0)

您想要一个提供有限数量请求的服务吗?我认为最好在页面加载时调用服务,在服务中设置一个等于返回数据的属性(服务在整个视图/控制器渲染中持久存在,因为它是单例),然后每当一个控制器/工厂/服务需要该数据,它只能从服务属性获取数据而不是调用get方法。

编辑:如果你想做"我想要一个只能被调用5次的服务"然后在服务中创建一个属性,该属性计算get方法被调用的次数,在每次调用时递增它,并在get方法中检查服务增量属性是否为< 5。