2017-02-22 53 views
0

я проблема, что возврат производится до methodStatus установлена ​​истина (так что возвращение всегда ложно, даже когда я вижу «успех» в журнале консоли)Ldapjs ждать, пока поиск не завершен

function anmelden(username, userPassword){ 
var methodStatus = false; 

var opts = { 
    filter: 'sAMAccountName=' + username, 
    scope: 'sub' 
}; 

ldapClient.search('OU=secret,OU=secret,DC=secret,DC=secret', opts, function(err, res) { 


    res.on('searchEntry', function(entry) { 
     var userClient = ldap.createClient({url: 'ldap://secret:1111'}); 
     userClient.bind(entry.object.dn + '', userPassword, function(err) { 
      if(err) { 
       console.log('failed') 
       methodStatus = false; 
      } else { 
       console.log('success') 
       methodStatus = true; 
      } 
      ldapBind(); 
     }); 
    }); 
    console.log('end'); 
    return methodStatus; 
}); 
} 

Это журнал консоли:

end 
success 

Спасибо за вашу помощь :)

ответ

0

это из-за асинхронности. return вызывается до вызова обратного вызова res.on. Есть много способов, чтобы справиться с этим, например, добавить функцию обратного вызова в anmelden и ссылаться на него, когда работа сделана:

function anmelden(username, userPassword, callback){ 
    var methodStatus = false; 

    var opts = { 
     filter: 'sAMAccountName=' + username, 
     scope: 'sub' 
    }; 

    ldapClient.search('OU=secret,OU=secret,DC=secret,DC=secret', opts, function(err, res) { 


     res.on('searchEntry', function(entry) { 
      var userClient = ldap.createClient({url: 'ldap://secret:1111'}); 
      userClient.bind(entry.object.dn + '', userPassword, function(err) { 
       if(err) { 
        console.log('failed') 
        methodStatus = false; 
       } else { 
        console.log('success') 
        methodStatus = true; 
       } 
       ldapBind(); 
      }); 
     }); 

     res.on('end', function() { 
      callback(methodStatus); 
     }); 
    }); 
} 

и вызывать его в сторону, как это:

anmelden('user', 'pass', function (methodStatus){ 
    console.log('the status is %s', methodStatus); 
}) 
+0

Здравствуйте, он по-прежнему отправляет конец до успеха –