我在nodejs中使用ldapjs库。我想在函数外部访问client.search的结果。 这是我的代码
items = [];
client.search('cn=users,dc=test,dc=com', opts, function (err, res) {
if (err)
console.log(err);
res.on('searchEntry', function (entry) {
items.push(entry.object);
});
res.on('error', function (err) {
console.error('error: ' + err.message);
});
res.on('end', function (result) {
console.log('status: ' + result.status);
console.log(items[0]); **//Prints results correctly**
});
});
console.log(items[0]); **//Prints []**
我尝试在搜索中返回项目。仍然无法打印。有什么建议吗?
答案 0 :(得分:0)
您可以使用包装函数和回调
function search(dn, options, callback){
// your code ...
res.on('end', function (result) {
callback(items);
}
});
并称之为
search(dn, options, function(err, result) {
//your result ...
console.log(result);
}
答案 1 :(得分:0)
我遇到了同样的问题。由于res.on'searchEntry'是事件发射器 ,我使用的一个简单解决方案是将整个内容包装在一个Promise中并返回。
let search = function( 'cn=users,dc=test,dc=com', opts ) {
return new Promise( ( resolve, reject ) => {
items = [];
client.search('cn=users,dc=test,dc=com', opts, function (err, res) {
if (err)
console.log(err);
reject( err )
res.on('searchEntry', function (entry) {
items.push(entry.object);
});
res.on('error', function (err) {
console.error('error: ' + err.message);
reject( error )
});
res.on('end', function (result) {
console.log('status: ' + result.status);
console.log(items[0]); **//Prints results correctly**
resolve( items )
});
});
}
};
然后您可以执行以下操作:
let entries = await search( 'cn=users,dc=test,dc=com', opts );