I solved the issue.
var addUserToGroup = function (selectedUser, selectedAvailableGroups, assignedGroups, availableGroups) {
var deferred = $q.defer();
var addPromise = [];
var selectLength = selectedAvailableGroups.length;
//Add user to selected groups on server
deferred.promise.then( function () {alert('testing')})
.then( function () {
for (var i = 0; i < selectLength; i++) {
addPromise[i] = $().SPServices({
operation: "AddUserToGroup",
groupName: selectedAvailableGroups[i].name,
userLoginName: selectedUser.domain
});
};
})
.then(function (){
for (var i = 0; i < selectLength; i++) {
assignedGroups.push(selectedAvailableGroups[i]);
//availableGroups.pop(selectedAvailableGroups[i]);
};
console.log(selectedUser.name + " added to: " + JSON.stringify(selectedAvailableGroups));
})
//when all users added, update dom
deferred.resolve();
}
If I was going to use promises from AngularJs, it didn't seem to make sense to me to also have a promise handler like:$.when.apply($,addPromise).done();
So I got rid of that and it worked perfectly.