我想通过一个承诺,护照的完成回调函数。如果我使用bluebird
诺言库,我将如何去与此?蓝鸟承诺作为承诺回调不知道api
我知道有一个promisification主题,有asCallback
和fromCallback
但我不能从例子中得到的想法。
exports.signup = new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
(req, email, password, done) => {
...
return done(null, false, {type: 'warning', message: 'Email is in use.'})
...
}
);
编辑:
这是我想实现:
exports.signup = new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true,
passportLocalCallback
});
function passportLocalCallback(req, email, password, done) {
return new Pormise((resolve, reject) => {
return User.findOneAsync({email: email});
})
.then((existingUser) => {
if (existingUser) {
resolve([null, false, {type: 'warning', message: 'That email is already taken.'}])
}
return User.generateHash(password);
})
.then((hash) => {
return User.createAsync({
email: email,
password: hash
})
})
.catch((err) => reject(err));
}
我不确定这是否会起作用,因为Passport要求用特定参数调用'done()'(对象表达式如果认证成功,则发送用户,或者如果不是,则为虚假)。你能详细说明你到底想做什么(例如,来自哪里的承诺)。 – robertklep
@robertklep我更新了这个问题,希望它现在更清楚。我很确定这可以通过蓝鸟promisification utils来完成,但不清楚如何。 – tsm
'新的Pormise((resolve,reject)=> {User.findOneAsync({email:email}); }}'肯定是错误的。不仅因为输入错误,而且因为你不能从构造函数回调中返回任何东西。 – Bergi