如何从函数中获取值?

时间:2017-04-12 21:12:22

标签: javascript

我试图从java脚本函数中获取值到变量

var isMember;

                        IsCurrentUserMemberOfGroup("Team Management System Members", function (isCurrentUserInGroup) {
                            if (isCurrentUserInGroup) {
                                //alert("Admin");
                                isMember = true;
                                return true;
                            }
                            else {
                                isMember = false;
                                //alert("NoAdmin")
                            }
                        });

                        alert(isMember);

以前用来调用的另一个函数

 function IsCurrentUserMemberOfGroup(groupName, 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.getByName(groupName);
                        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);
                        }
                    }

但是当我执行时我得到的值是:undefined

谢谢

2 个答案:

答案 0 :(得分:2)

在尝试检查IsCurrentUserMemberOfGroup的值之前,必须确保调用与isMember关联的函数。你不能只在函数代码之后放一个alert(),并期望它首先运行该函数。

这是一个有效的例子:

var isMember;

function checkUser(isCurrentUserInGroup) {
  if (isCurrentUserInGroup) {
    isMember = true;
  } else {
    isMember = false;
  }
}

alert(isMember);  // undefined because function hasn't bee called yet

checkUser();      // invoke the function with no data being passed in

alert(isMember);  // false because undefined was passed into function

checkUser("Something");  // invoke the function with data being passed in

alert(isMember);  // true because something was passed into function

答案 1 :(得分:0)

很可能在IsCurrentUserMemberOfGroup内有一些异步内容,一旦你的异步内容完成,你传递的回调就会被推迟。

您的IsCurrentUserMemberOfGroup函数可能看起来像这样:

function IsCurrentUserMemberOfGroup(someString, callback){
  .. 
  //async stuff here
  myAPI.asyncMethod(callback);

  //here the parser will go on with the synchronous code and park in the event queue the callback for the async method
  ..
}

一旦解析器遇到异步函数,回调就会停在事件队列中。异步函数(例如从文件中读取,处理网络等)将由其他操作系统任务处理,这些操作将在完成时通知javascript线程,以便最终可以调用回调。

问题出在这里。 解析器一行一行地同步执行,所以它必须继续不阻塞ui,这就是它在异步内容完成之前到达alert函数的原因,并且打印未定义,因为成员仍未被分配。