私は最近Promises(Bluebird)を学び始めましたが、できるだけそれらを使用しようとしていますが、私はこの場合に約束を返す必要がある場合はちょっと混乱します。約束を混乱させる。私はここに戻る必要がありますか?
ここで私は私が作ったパスポート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)
をラインAには、以下の場合に1をデータベースにし、falseに発見された場合、ユーザーに解決される約束を返すようにpg-promiseライブラリを使用していますユーザーが見つかりませんでした。
bcrypt.compare
(ラインB)は、bcryptを使用して、パスワードとハッシュが一致するかどうかを確認します。それは真実か偽になるかを決める約束を返します。
コードは完璧に動作ラインAとBがそう
return users.get(username) // A
return bcrypt.compare(password, user.password).then(function(result) { // B
コードがでと約束を返さずに働くように返す必要がある場合、私は混乱しています。
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