【发布时间】:2017-07-26 21:34:31
【问题描述】:
我已经阅读了很多关于 Promises 的文章,但我觉得我仍然缺少一些东西。这是我试图绕开的一个例子。
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() 正在调用从 Promise 返回的 AD 函数 isUserValid,而 _isADValid() 被包装在一个 then/catch 中,它只返回结果。
使用“_isADValidPromise”的代码 2 可以正常工作。而且我知道它包含在 Promise 中,所以它按照我的预期进行。
如果有人可以帮助澄清为什么 Code 1 不起作用
【问题讨论】:
-
你有错字:
resolve,不是resolv -
谢谢我修好了。同样的问题。我只是在 stackoverflow 上输入错误
-
另外,看起来
ad.authenticate(...)应该是this.ad.authentication(...)。