Так что я недавно начал изучать обещания (Bluebird), и теперь я стараюсь использовать их как можно больше, но я немного смущен, если мне нужно вернуть обещания в этом случае.Confused о обещаниях. Мне нужно вернуться сюда?
Здесь у меня есть паспорт LocalStrategy, что я сделал:
passport.use(new LocalStrategy(function(username, password, done) {
users.get(username) // A
.then(function(user) {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
bcrypt.compare(password, user.password).then(function(result) { // B
if (result) {
return done(null, user);
}
return done(null, false, { message: 'Incorrect password.' });
});
})
.catch(function(err) {
return done(err);
});
}));
users.get(username)
на линии А использует pg-promise библиотеку, чтобы вернуть обещание, что будет решать в пользователя, если один находится в базе данных, и ложь, если пользователь не был найден.
bcrypt.compare
В строке B используется bcrypt, чтобы проверить, соответствуют ли пароль и хэш. Он возвращает обещание, которое разрешит true или false.
код работает отлично, я просто запутаться, если линия А и B должен вернуться, как так
return users.get(username) // A
return bcrypt.compare(password, user.password).then(function(result) { // B
код работает и без возврата обещаний.
Is Passport/Node только ждет, пока не увидит return done
? Означает ли это, что эта функция синхронна, хотя все внутри нее асинхронно? Обычно вы возвращаете обещание, а затем используете .then()
, но так как LocalStrategy не использует .then()
или .catch()
Мне ничего не нужно возвращать? Любой вход очень приветствуется. Благодарю.
По крайней мере, связанные с: http://stackoverflow.com/questions/23920589/how-to-pass-a-third-argument-to-a- callback-using-bluebird-js-nodeify – Tomalak
Я нашел, что это действительно хорошая статья, объясняющая путаницы с обещаниями [У нас проблема с обещаниями] (https://pouchdb.com/2015/05/18/we-have- a-problem-with-promises.html) – ivn
Tomalak, ivn: Спасибо, собираюсь проверить их. – Nikokin