Node.js计时w / activedirectory包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js计时w / activedirectory包相关的知识,希望对你有一定的参考价值。

我非常喜欢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。有没有人有任何想法我怎么做到这一点?

答案

您需要将用户数组映射到在处理一个用户时解析的Promise数组,这样您就可以使用Promise.all等待所有Promise完成:

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

(但是这将继续一个请求)

以上是关于Node.js计时w / activedirectory包的主要内容,如果未能解决你的问题,请参考以下文章

FCM - node.js 中的计时器功能

node.js学习全局对象

我的消息在 node.js/discord.js 中重复了很多次

Raspberry Pi Zero W 上的 Node.js,依赖项不会自动下载

使用 discord.js 和 Node.js 清除所有不是图像或链接的消息 [关闭]

通过Twit w / Node.js发布Twitter线程