在检查 javascript 中的共享点组中的当前用户后,如何获取 bool 值?

How can I get a bool value, after I check if current user in sharepoint group in javascript?

我编写了一个函数来检查 javascript

中的共享点组中的用户是否
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 和 return 的 bool 值。

function SetButtonPermission() {
var isInGroup;
IsCurrentUserMemberOfGroup("Global", function(isCurrentUserInGroup) {
    isInGroup = isCurrentUserInGroup;
});
return isInGroup; }

似乎我无法获取 bool isCurrentUserInGroup 因为它提醒 "isInGroup is undetified"。 那么如何获取 bool 值?

与提供的答案类似 ,当您处理异步函数调用和回调时,最好将 data/logic 注入 你的回调函数而不是从中返回数据。

另一种方法是将 "return" 数据推送到全局变量中,或者至少推送到与回调执行相同范围内可访问的变量,并延迟执行相关逻辑,直到回调执行完毕.

您可能想查看 JavaScript promises 以了解脚本作者通常如何处理异步代码。