Результаты ldapjs client.search доступны вне функции
Я использую библиотеку ldapjs в nodejs. Я хочу получить доступ к результатам 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 []**
Я пытался вернуть предметы в поиске. Все еще не печатает. Какие-либо предложения?
1 ответ
Я столкнулся с той же проблемой. Поскольку res.on 'searchEntry' является эмиттером событий, я использую простое решение - обернуть все это обещанием и вернуть его.
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 );
Вы можете использовать функцию-оболочку и обратный вызов
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);
}