我使用Check if Current Users belongs to SP group using javascript Client Side Object Model中的一些代码来检查SP用户是否在SP组中。我想为一个用户循环遍历一些组,所以我把这段代码放在一个循环中。但是,代码仅在循环数组的最后一个值上执行。有什么想法吗?
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());
});;;
}
&#13;
输出如下:
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;
};
}
答案 0 :(得分:0)
isUserMemberOfGroup()
采用记录“是”或“否”的回调,因此,当回调被调用时,循环的所有迭代都已完成,所有学校都已记录。考虑将学校日志记录到回调内部以保持同步性。
编辑:添加一些代码。
function addSchools() {
schoolArray.forEach(function (item) {
groupId = item[2]
optionText = item[0]
console.log(optionText)
isUserMemberOfGroup(currentUserId, groupId,
function(isCurrentUserInGroup) {
console.log(optionText);
if (isCurrentUserInGroup)
console.log('yes');
else
console.log('no');
},
function(sender, args) {
console.log(args.get_message());
});;;
}
}
通过使用array.forEach()
方法,您可以将每个循环实例塞入隔离范围,这样您就不必担心变量会被覆盖。
答案 1 :(得分:0)
DELETE dup FROM allCity AS original
LEFT JOIN allCity AS dup
ON dup.city = original.city AND
dup.objId != original.objId;
答案 2 :(得分:0)
使用以下方式让它工作:
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 );
感谢大家的意见!