javascript - 如何处理调用同一函数的多个 Ajax 调用?

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

您好,页面上有 4 个指令,所有指令都需要用户列表。 用户列表存储在需要 hhtp 请求的数据库中。 由于页面上同时有 4 个指令,因此已将 4 个不同的 ajax 调用发送到服务器以获得类似的响应。

然后响应就会被缓存。

如何让所有 4 个指令都接收其用户列表,并且仅将一个 ajax 发送到服务器。

代码内部指令(self是这个)(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 个调用等待响应并将响应传回?

最佳答案

您可以使用 Promise 来查看它是否已经在运行。因为服务在 Angular 上是单例,所以你知道它始终是一个共享实例:

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;
}

关于javascript - 如何处理调用同一函数的多个 Ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305219/

相关文章:

angularjs - 使指令函数在父范围内可访问而无需事件

javascript - 使用 Javascript 进行表单验证 - 不起作用

javascript - 字符串 "802.11 auth"上的 parseInt 没有返回我期望的结果

javascript - 如何启用特定行中的文本框?

javascript - 在数据表的渲染列中使用 ng-click

angularjs - Bootstrap 弹出框在 AngularJs ng-repeat 中不起作用

javascript - 使用带有偏差的 Random()

javascript - 如何在 Angular.js 中组合两个 Controller ?

javascript - 为什么我不能像这样覆盖变量的值?

javascript - AngularJS - 如何为自定义指令设置 css 类?