【发布时间】:2016-12-05 18:16:43
【问题描述】:
所以我有一个承诺链来解决我正在经历的某个回调地狱。
链条是这样的:
server.exchange(oauth2orize.exchange.password(
function(client, email, password, scope, done) {
users.findOne({email: email})
.then(authenticateUser) // mix in password here?
.then(deleteExistingTokens)
.then(createAndSaveNewTokens)
.then(function(results){
done(null, results[0], results[1], {'expires_in': tokenLife});
}).catch(err => {done(err);});
}));
所以 users.findOne 返回一个返回我的用户的承诺。我需要“混合”密码以进行身份验证。鉴于这是我对 authenticateUser 的定义,我将如何在链中插入新变量?
const authenticateUser = (err, user) => { // add password here?
return Promise((resolve, reject) => {
if (!user) {
reject('User not found');
}
try {
return User(user).authenticate(password)
.then((result) => {
if (result) {
resolve(user);
} else {
reject('Invalid password');
}
});
}
catch (err) {
reject('Invalid user');
}
});
};
【问题讨论】:
-
authenticateUser的定义与您将其与then一起使用或将password传递给它不兼容。它需要更新。 -
我做错了什么?
-
我将其添加到我的答案中。
-
值得先检查this question。
标签: javascript ecmascript-6 es6-promise