6

Promises は初めてで、この問題を解決する方法がわかりません。認証システムを実行しています。最初の呼び出しは、データベースで電子メールをチェックすることです。ユーザーが存在する場合は、パスワードを bcrypted パスワードと照合します...私はこの lib を bcrypt に使用しています: https : //npmjs.org/package/bcrypt は約束と互換性がないため、「promisify」を使用しています次の署名: compare(password, crypted_pa​​ssword, callback)。

これは私のコードです:

var compare = Promise.promisify(bcrypt.compare);

User.findByEmail(email)   
    .then(compare()) <--- here is the problem

これは私の findByEmail メソッドです:

User.prototype.findByEmail = function(email) {
var resolver = Promise.pending();

knex('users')
    .where({'email': email})
    .select()
    .then(function(user) {
        if (_.isEmpty(user)) { resolver.reject('User not found'); }
        resolver.fulfill(user);
    });


return resolver.promise;

}

その場合、「比較」メソッドに複数の値を割り当てる方法は? 私は約束のポイントを逃していますか?

4

2 に答える 2

5
.then(compare()) <--- here is the problem

このthenメソッドcompareは、別の promise [またはプレーンな値] を返す関数を想定しているため、呼び出さずに渡す必要があります。引数を指定する必要がある場合は、ラッパー関数式を使用します。

User.findByEmail(email)   
    .then(function(user) {
         return compare(/* magic */);
    }).…
于 2014-01-21T23:53:33.537 に答える
4

私はBergiが言ったことを正確に実行し、私のために働いています:

this.findByEmail(email)
.then(function(user) {
  return compare(password, user.password);
})
于 2014-01-22T00:19:49.057 に答える