I used some code from Check if Current Users belongs to SP group using javascript Client Side Object Model to check if a SP user is in a SP group. I wanted to loop through some groups for a user, so I stuck that code in a loop. However the code only executes on the last value of the loop array. Any thoughts?
function addSchools() {
for (var i = 0; i < schoolArray.length; i++) {
groupId = schoolArray[i][2]
optionText = schoolArray[i][0]
console.log(optionText)
isUserMemberOfGroup(currentUserId, groupId,
function(isCurrentUserInGroup) {
if (isCurrentUserInGroup)
console.log('yes');
else
console.log('no');
},
function(sender, args) {
console.log(args.get_message());
});;;
}
The output looks like:
schoola
schoolb
schoolc
shooold
yes
instead of
schoola
yes
schoolb
no
schoolc
yes
isUserMemberOfGroup:
function isUserMemberOfGroup(userId, groupId, success,error) {
var ctx = SP.ClientContext.get_current();
var allGroups = ctx.get_web().get_siteGroups();
var group = allGroups.getById(groupId);
ctx.load(group,'Users');
ctx.executeQueryAsync(
function(sender, args) {
var userInGroup = findUserById(group.get_users(),userId);
success(userInGroup);
},
error);
var findUserById = function(users,id){
var found = false;
var e = group.get_users().getEnumerator();
while (e.moveNext()) {
var user = e.get_current();
if (user.get_id() == id) {
found = true;
break;
}
}
return found;
};
}
just got it to work using:
ctx.executeQueryAsync(
function(sender, args) {
var userInGroup = findUserById(group.get_users(),userId);
console.log(optionText)
console.log('yes here we go ' + optionText)
var option = document.createElement("option");
option.text = optionText
x.add(option);
},
error );
Thanks everyone for your input!