防止多个http调用

时间:2016-05-09 08:19:14

标签: http promise

我有一个函数调用后端服务并获取数据并在UI中显示。我正在使用angular,这个函数在我的控制器中,我从html调用。因此,每次html更新时,都会进行网络呼叫。

我尝试添加一个控制器级别变量来检查调用是否已在进行中,如果是,则返回其promise或以其他方式再次调用。即使在第一次通话未完成之前,这也会阻止相同的通话重复。

还有其他方法可以在我的项目中处理它。根据我的方法,我必须为个别函数编写

我目前的代码如下

var getDataPromise;

function getData() {
    if (getDataPromise) return getDataPromise;


    getDataPromise = $http.get('url').then((response) => {

        return response;
    }).finally(() => {
        getDataPromise = null;
    })
    return getDataPromise;
}

我只想防止网络电话重叠。因为服务器中的数据可能会不时发生变化。

1 个答案:

答案 0 :(得分:2)

阻止多个http呼叫的一种方法是取消之前的http呼叫,你可以这样做:

test.service('testService', function ($http,$q) {
    var canceler;
    var getList = function (data) {

      if (canceler)canceler.resolve();
         canceler = $q.defer();
         return $http.post('www.test.com', data,
                {timeout: canceler.promise});

    };