【问题标题】:ldapjs client.search results to be accessed outside of the function要在函数外访问的 ldapjs client.search 结果
【发布时间】:2026-02-13 06:10:01
【问题描述】:

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

我尝试在搜索中返回项目。还是不打印。有什么建议吗?

【问题讨论】:

    标签: javascript node.js ldapjs


    【解决方案1】:

    我遇到了同样的问题。由于 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 );
    

    【讨论】:

      【解决方案2】:

      您可以使用包装函数和回调

      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);
      }
      

      【讨论】: