Angularjs异步请求

时间:2015-02-27 22:23:37

标签: angularjs sharepoint

控制器1

 var promise = UserService.userexists(groupid);
                promise.then(
                    },
                    function (response) {
                    }
                );

控制器2

var promise = UserService.userexists(groupid);
            promise.then(
                },
                function (response) {
                }
            );

服务

   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环境。

由于

1 个答案:

答案 0 :(得分:0)

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

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