ldapjs client.search结果可以在函数外部访问

时间:2018-04-22 17:59:45

标签: javascript node.js ldapjs

我在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 []**

我尝试在搜索中返回项目。仍然无法打印。有什么建议吗?

2 个答案:

答案 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 );