[英]Node.js timing w/ activedirectory package
我对Node很熟悉,但是发现activedirectory软件包比任何其他Python模块都好得多,该模块可以跨AD林提取递归组成员,因此非常适合该工作。 我之前用JS完成过加载,但是显然这是另一回事。
基本上,我有以下几点:
var ad = new ActiveDirectory(config);
const groupName = 'CN=myGroupName*'
let group_members = []
ad.findGroups(groupName, function(err, groups) {
groups.forEach(function(group) {
ad.getUsersForGroup(group.dn, function(err, users) {
users.forEach(function(user) {
group_members.push([group.cn, user.sAMAccountName])
})
})
})
})
问题是这可以完美地工作,但是我接下来要做的就是将结果放入数据库中,但是我无法把握正确的时机。 我将其添加到测试中:
setTimeout(function() {
console.log(group_members)
return
}, 5000)
可以,但是显然不理想。
不幸的是,我坚持使用Node.js 6(使用AWS Lambda),因此甚至无法使用Promises AFAIK。 有谁知道我如何正确执行此操作?
您需要将用户数组映射到一个Promises数组,该数组可在处理一个用户时进行解析,因此您可以等待所有Promises使用Promise.all完成:
const done = new Promise(res => {
ad.findGroups(groupName, function(err, groups) {
res(Promise.all(groups.map(function(group) {
return new Promise(res => {
ad.getUsersForGroup(group.dn, function(err, users) {
users.forEach(function(user) {
group_members.push([group.cn, user.sAMAccountName])
});
res();
});
})));
});
});
因此,您可以执行以下操作:
done.then(() => console.log(group_members));
另外,您可以使用该API并使用新的async / await语法:
const {promisify} = require("util");
const findGroups = promisify(ad.findGroups);
const getUsersForGroups = promisify(ad.getUsersForGroups);
(async function(){
const groupMembers = [];
const groups = await findGroups(groupName);
for(const group of groups){
const users = await getUsersForGroups(group.dn);
for(const user of users)
groupMembers.push([group.cn, user.sAMAccountName]);
}
//all done
console.log(groupMembers);
})()
(但是,这将继续处理一个请求)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.