Ich habe ein einfaches Modul mit ein paar Funktionen, um mit einem Active Directory zu interagieren.Node.js: Konvertieren von Modulfunktionen von Callbacks zu Versprechen mit Bluebird
den Standard-Callback-Stil verwenden, funktioniert der Code einfach gut:
/**
* mylib.js
**/
const ActiveDirectory = require('activedirectory');
// Instantiate AD client
const ad = new ActiveDirectory({
url: 'ldaps://...',
baseDN: 'DC=...',
});
module.exports = {
// Authenticate user against the AD
authenticate: (username, password, callback) => {
// Authentication request
ad.authenticate(username, password, (err, status) => {
callback(err, status);
});
},
};
/**
* client.js
**/
const mylib = require('./mylib');
mylib.authenticate('<username>', '<password>', (err, status) => {
if (err) {
console.log(`Error: ${err}`);
return;
}
console.log(`Success: ${status}`);
});
Execution Ergebnis:
> node client.js
Success: true
Der nächste Schritt war meine lib Methode Refactoring Promises zu verwenden, anstatt Rückrufe:
/**
* mylib.js
**/
const ActiveDirectory = require('activedirectory');
const Promise = require('bluebird');
//...
module.exports = {
// Authenticate user against AD
authenticate: Promise.method((username, password) => {
ad.authenticate(username, password, (err, status) => {
if (err) throw err;
return status;
});
}),
};
/**
* client.js
**/
const mylib = require('./mylib');
myLib.authenticate('<username>', '<password>').then((status) => {
console.log(`Success: ${status}`);
}).catch((err) => {
console.log(`Error: ${err}`);
});
Ausführungsergebnis:
> node client.js
Success: undefined
So sieht es aus wie die status
wird nicht aufgelöst.
Wenn ich den AD-Server-URL zu etwas anderem (zu zwingen, Fehler eine Verbindung und sehen Sie die Ablehnung) ändern Ich kann sowohl die Entschlossenheit sehen und die Ablehnung Protokoll:
> node client.js
Success: undefined
/Users/.../mylib.js:84
if (err) throw err;
^
Error: connect ECONNREFUSED <IP>
at Object.exports._errnoException (util.js:1036:11)
at exports._exceptionWithHostPort (util.js:1059:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
Was mache ich falsch? Kann es nicht herausfinden.
Versuchen Sie, das Ergebnis von ad.authenticate (...) zurückzugeben. 'return ad.authenticate()' Wenn dies nicht funktioniert, wickeln Sie diese Methode in eine andere Versprechen und zurück. Wenn Sie die [docs] (http://bluebirdjs.com/docs/api/promise.method.html) überprüfen, sehen Sie, dass bei async eine Zusage zurückgegeben wird. – bpinhosilva