我想通過一個承諾,護照的完成回調函數。如果我使用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