Результаты 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);
}
Другие вопросы по тегам