我编写了一个函数来检查javascript中sharepoint组中的用户是否
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); currentContext.load(allGroups, 'Include(Users)'); currentContext.executeQueryAsync(OnSuccess, OnFailure); function OnSuccess(sender, args) { var userInGroup = false; var groupEnumerator = allGroups.getEnumerator(); while (groupEnumerator.moveNext()) { var oGroup = groupEnumerator.get_current(); if (groupName == oGroup.get_title()) { var allUsers = oGroup.get_users(); var userEnumerator = allUsers.getEnumerator(); while (userEnumerator.moveNext()) { var oUser = userEnumerator.get_current(); if (oUser.get_id() == currentUser.get_id()) { userInGroup = true; break; } } } } OnComplete(userInGroup); } function OnFailure(sender, args) { OnComplete(false); } }
我在另一个函数中使用它,希望获得 OnComplete 的bool值并返回它。
function SetButtonPermission() { var isInGroup; IsCurrentUserMemberOfGroup("Global", function(isCurrentUserInGroup) { isInGroup = isCurrentUserInGroup; }); return isInGroup; }
似乎我无法获得bool isCurrentUserInGroup ,因为它警告“isInGroup未定”。 那么如何获得bool值?
答案 0 :(得分:0)
与提供here的答案类似,当您处理异步函数调用和回调时,您最好将数据/逻辑注入回调中函数而不是从中返回数据。
另一种方法是推动"返回"将数据转换为全局变量,或者至少转换到与回调执行相同范围内可访问的变量,并延迟依赖逻辑的执行直到回调执行之后。
您可能希望了解JavaScript承诺,以了解脚本作者通常如何处理异步代码。