Search code examples
javascriptnode.jsasynchronousasync-awaitnode-modules

synchronous calls (await ad.authenticate)


How can I make an asynchronous call? i tried with this code:

abc = await ad.authenticate(username, password, function(err, auth) {
          if(err){
            console.log('ERROR: '+JSON.stringify(err));
            fail_found = err.name;
            return;
          }

          if(auth){
            console.log('Authenticated!');
          }else{
            console.log('Authenticated Faliled');
            fail_found = 'No Authenticated ';
          }          
        });
      }
      console.log("Fails?: ",fail_found);

NPM: https://www.npmjs.com/package/activedirectory2 Github: https://github.com/jsumners/node-activedirectory/

Thx !


Solution

  • You can try With a Promise:

    let myPromise = new Promise((resolve, reject) => {
         ad.authenticate(username, password, function(err, auth) {
          if(err){
            console.log('ERROR: '+JSON.stringify(err));
            fail_found = err.name;
            reject(fail_found)
            return;
          }
    
          if(auth){
            console.log('Authenticated!');
            resolve('Authenticated!');
          }else{
            console.log('Authenticated Faliled');
            fail_found = 'No Authenticated ';
            reject(fail_found)
          }          
        });
      }
      console.log("Fails?: ",fail_found);
      reject(fail_found)
    });
    
    myPromise.then((successMessage) => {
     console.log(successMessage);
    }).catch(err => console.log(err))
    

    Or in the first part of documentation show a promiseWrapper:

    const AD = require('activedirectory2').promiseWrapper;
    const config = { url: 'ldap://dc.domain.com',
               baseDN: 'dc=domain,dc=com',
               username: 'username@domain.com',
               password: 'password' }
    const ad = new AD(config);