加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 在Angular中有多个调用等同一个promise

发布时间:2020-12-17 17:58:07 所属栏目:安全 来源:网络整理
导读:我在页面上有多个使用相同服务的控制器,为了举例我们将调用服务USER. 第一次调用USER.getUser()时,它会对用户的GET数据执行$http请求.调用完成后,它将数据存储在USER.data中.如果对USER.getUser()进行另一次调用,它会检查USER.data中是否有数据,如果有数据,
我在页面上有多个使用相同服务的控制器,为了举例我们将调用服务USER.

第一次调用USER.getUser()时,它会对用户的GET数据执行$http请求.调用完成后,它将数据存储在USER.data中.如果对USER.getUser()进行另一次调用,它会检查USER.data中是否有数据,如果有数据,则返回该数据,而不是进行调用.

我的问题是对USER.getUser()的调用发生得如此之快,以至于USER.data没有任何数据,因此它再次触发$http调用.

以下是我现在为用户工厂提供的信息:

.factory("user",function($http,$q){
    return {
        getUser: function(){
            var that = this;
            var deferred = $q.defer();
            if(that.data){
                deferred.resolve(that.data);
            } else {
                $http.get("/my/url")
                .success(function(res){
                    that.data = res;
                    deferred.resolve(that.data);
                });
            }
            return deferred.promise;
        }
    }
});

我希望我的问题有道理.任何帮助将非常感激.

解决方法

这对你有用吗?

.factory("user",$q) {
        var userPromise;

        return {
            getUser: function () {
                if (userPromise) {
                    return userPromise;
                }

                userPromise = $http
                    .get("/my/url")
                    .then(function(res) {
                        return res.data;
                    });

                return userPromise;
            }
        }
    })

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读