【发布时间】:2019-01-12 22:04:09
【问题描述】:
这里是一个 node.js(和一般的编码)初学者,正在与 node 的异步特性作斗争。我正在尝试编写一些代码来查找某些 AD 组的成员并将成员名称添加到数组中,按照下面的“getMembers”函数。我只对计算机对象感兴趣,这就是为什么我只有 ad.find 返回“其他”对象。
一旦完成,我希望“processAssets”函数对数组做一些事情——为了测试的目的,只是输出到 console.log。问题是在“getMembers”填充数组之前“processAssets”正在运行。我究竟做错了什么?我意识到答案可能以“几件事”开头......!
const ActiveDirectory = require('activedirectory');
var ad = new ActiveDirectory(config);
var query = 'memberOf=cn=';
var cNames = [
'group1',
'group2',
'group3'
];
var baseOu = ',ou=Groups,dc=example,dc=com';
function run(cNames) {
Promise.all(cNames.map(cName => getMembers(cName))).then(processAssets())
}
async function getMembers(cName) {
await ad.find(query + cName + baseOu, async function(err, results) {
if ((err) || (! results)) {return;}
await _.each(results.other, function(other) {
assetArray.push(other.cn);
});
});
}
function processAssets() {
console.log("Contents of assetArray (" + assetArray.length + " assets):");
assetArray.forEach(function(item) {
console.log(item);
});
}
提前致谢。
【问题讨论】:
-
您确定
.find返回Promise吗?它看起来是基于回调的。 -
我应该提到我使用的是 activedirectory 包,而不是直接使用广告。我已经更新了问题以使其更清楚。
-
那么,您确定
.find返回Promise? -
不,我不确定 - 正如我所说的我是初学者,尽管研究了这个网站和其他网站,但我觉得我错过了一些基本的东西。
标签: arrays node.js asynchronous