我已阅读了许多关于Promise的文章,并且觉得我仍然缺少一些东西。这里是我试图包裹头部的一个例子。将我的头围绕Promise,然后
File: ad.js
// Using node.js activedirectory
class AD
{
constuctor(options){
this.ad = new ActiveDirectory(options);
}
isUserValid(user, password){
return new Promise((resolve, reject) =>{
ad.authenticate(user, password, (err, auth) ->{
if(err){
reject({ code: 500, message: 'Unknow error'});
}
if(auth){
resolve({code: 200, message: 'ok'});
}
});
)
}
}
module.exports = {
AD: AD
}
File: session.js
createSession(user, password){
var self = this;
return new Promise((resolve, reject) =>{
const ad = new AD("Required parameters");
Code: 1
const result = self._isADValid(ad, user, password);
Code: 2
self._isADValidPromise(ad, user, password)
.then(resp_ad =>{
})
.catch(err =>{
});
);
}
_isADValidPromise(ad, user, password) {
return new Promise((resolve, reject) => {
ad.isUserValid(user, password)
.then(resp_ad => {
resolv(resp_ad);
})
.catch(err => {
reject(err);
});
});
}
_isADValid(ad, user, password) {
return ad.isUserValid(user, password)
.then(resp_ad => {
return resp_ad;
})
.catch(err => {
return err;
});
}
我试图理解如下:
不应该“代码1” _isADValid返回一个值。相反,它返回“Promise {pending}”。我认为你只需要使用Promise的then/catch? 因此,函数_isADValid()正在调用AD函数isUserValid,该函数从Promise返回并且_isADValid()被封装在只返回结果的then/catch中。
使用“_isADValidPromise”的代码2没有任何问题。我得到它包裹在一个承诺,所以它做我的预期。
如果有人可以帮助解释,为什么代码1不工作
你有错字:'''resolve''',而不是'''resolv''' – hya
谢谢我修复了它。一样的问题。我只是在stackoverflow上输入错误 – adviner
另外,它看起来像'ad.authenticate(...)'应该是'this.ad.authentication(...)'。 – jfriend00