Я использовал код от Check if Current Users belongs to SP group using javascript Client Side Object Model, чтобы проверить, является ли пользователь SP в группе SP. Я хотел пропустить несколько групп для пользователя, поэтому я зациклил этот код в цикле. Однако код выполняется только при последнем значении массива циклов. Есть предположения?Функция Javascript не работает внутри цикла, работает только в конце
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());
});;;
}
Выход выглядит следующим образом:
schoola
schoolb
schoolc
shooold
yes
вместо
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;
};
}
Спасибо! Я знаю, что такое обратный вызов (у меня есть несколько документов, но я все еще смущен). Где обратный вызов в функции 'isUserMemberOfGroup()'? – As3adTintin
Вы передаете его в качестве третьего параметра, это 'function (isCurrentUserInGroup) {...}'. Это в основном функция, и когда 'isUserMemberOfGroup()' закончен, она вызовет эту функцию, передающую логическое значение, указывающее его результат как параметр 'isCurrentUserInGroup', чтобы вы могли его использовать. – Cameron
Короче говоря, обратный вызов - это функция, которую вы передаете как параметр функции async. Когда функция async будет закончена, она вызовет (вызовет) этот обратный вызов с возвращаемым значением. Пока функция async работает, остальная часть вашего кода продолжает работать, что обеспечивает плавный пользовательский интерфейс. – Cameron