Search code examples
javascriptsharepoint-2010

Javascript function not running inside loop, only runs at end


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

}


Solution

  • 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!