2017-02-22 5 views
0

Ich habe das Problem, dass die Rückkehr vor methodStatus gemacht wird auf true gesetzt ist (so die Rückkehr immer falsch ist, auch wenn ich ‚Erfolg‘ in dem Konsolenprotokoll sehen)Ldapjs warten, bis Suche abgeschlossen ist

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

Dies ist die Log-Konsole:

end 
success 

Danke für Ihre Hilfe :)

Antwort

0

es wegen Asynchronität ist. Die return wird aufgerufen, bevor der Rückruf der res.on aufgerufen wird. es gibt viele Möglichkeiten, es zu behandeln, zum Beispiel einen Rückruf an den anmelden hinzuzufügen und es aufzurufen, wenn die Arbeit getan ist:

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

und es in der Art und Weise, wie diese aufzurufen:

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

Hallo, es sendet immer noch Ende vor Erfolg –

Verwandte Themen