如何处理调用相同函数的多个Ajax调用?

时间:2016-10-28 12:33:29

标签: javascript angularjs angularjs-directive angularjs-service angular-http

页面上有4个指令,所有指令都要求用户列表。 用户列表存储在需要hhtp请求的数据库中。 因为4指令同时在页面上,所以已经向服务器发送了4个不同的ajax调用以进行类似的响应。

然后响应被缓存。

可以做什么,所有4指令都收到其用户列表,只有一个ajax被发送到服务器。

Code Inside Directive(自称是这个)(ajaxCallService是服务)

ajaxCallService.getUser(function(response) {
                self.users = response;
                //Next operations
});

ajaxCallService服务

Variable
var userList = []

Method
if (!userList.length) {
          $http.post({
                url: #,
                data:#
            })
            .then(
                function(response) {
                        userList = response.allMembers;
                        callback && callback(userList);
                }
            );
        }else{
            callback && callback(userList);
        }

如何阻止4个ajax调用,只进行1次调用,让其他3个等待响应并传回响应?

1 个答案:

答案 0 :(得分:2)

您可以使用promises来查看它是否已在运行。因为服务是角度的单例,你知道它总是一个共享实例:

var userList = [];
var promise;

function getUser() {
    // inject the $q service
    var deferred = $q.defer();

    if (userList.length) {
        // already got data, immediately resolve that one
        deferred.resolve(userList);
    }

    if (promise) {
        // a promise is already working on it, return this one
        return promise;
    } else {
        $http.post(...).success(function(response) {
            userList = response;
            deferred.resolve(response);
        });
    }

    // if this point is reached, this is the first call
    // assign the promise so other calls can know this one is working on it
    promise = deferred.promise;
    return promise;
}