首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs异步请求

Angularjs异步请求
EN

Stack Overflow用户
提问于 2015-02-28 06:23:37
回答 1查看 122关注 0票数 0

控制器1

代码语言:javascript
复制
 var promise = UserService.userexists(groupid);
                promise.then(
                    },
                    function (response) {
                    }
                );

控制器2

代码语言:javascript
复制
var promise = UserService.userexists(groupid);
            promise.then(
                },
                function (response) {
                }
            );

服务

代码语言:javascript
复制
   app.factory("UserService", function ($q, $timeout) {
        return {

                userexists: function (groupid) {

                var deferred = $q.defer();
                //this is just to keep a pointer to parent scope from within promise scope.

                    IsCurrentUserMemberOfGroup(groupid, function (isCurrentUser) {
                        if (isCurrentUser) {
                            deferred.resolve(isCurrentUser);
                        }
                        else {
                            deferred.reject(isCurrentUser);
                        }
                    });

                    return deferred.promise;
                }
            }
    });


 function IsCurrentUserMemberOfGroup(groupId, OnComplete) {



        var currentContext = new SP.ClientContext.get_current();
        var currentWeb = currentContext.get_web();

        var currentUser = currentContext.get_web().get_currentUser();
        currentContext.load(currentUser);

        var allGroups = currentWeb.get_siteGroups();
        currentContext.load(allGroups);

        var group = allGroups.getById(groupId);
        currentContext.load(group);

        var groupUsers = group.get_users();
        currentContext.load(groupUsers);

        currentContext.executeQueryAsync(OnSuccess, OnFailure);

        function OnSuccess(sender, args) {
            var userInGroup = false;
            var groupUserEnumerator = groupUsers.getEnumerator();
            while (groupUserEnumerator.moveNext()) {
                var groupUser = groupUserEnumerator.get_current();
                if (groupUser.get_id() == currentUser.get_id()) {
                    userInGroup = true;
                    break;
                }
            }
            OnComplete(userInGroup);
        }

        function OnFailure(sender, args) {
            OnComplete(false);
        }
}

我在同一个页面上有控制器1和控制器2,它们都使用相同的服务来检查用户是否存在于特定的组中。问题是该服务为每个控制器运行检查用户方法(IsCurrentUserMemberOfGroup)。有没有办法让我只执行一次方法,其他控制器就可以使用它?

这是sharepoint 2010环境。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-02-28 06:41:53

您可以将结果缓存到您的服务中,可能类似于

代码语言:javascript
复制
app.factory("UserService", function ($q, $timeout) {
    return {

        var cache = {};

        userexists: function (groupid) {

            var deferred = $q.defer();

            if (cache[groupif]) {
                deferred.resolve(cache[groupif]);
                return deferred.promise;
            }

            IsCurrentUserMemberOfGroup(groupid, function (isCurrentUser) {
                if (isCurrentUser) {
                    cache[groupif] = isCurrentUser;
                    deferred.resolve(isCurrentUser);
                }
                else {
                    deferred.reject(isCurrentUser);
                }
            });

            return deferred.promise;
        }
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28775379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档