2017-03-13 6 views
0

カスタムの約束を書いたときに悪い習慣を使っているのだろうかと思います。約束を書いたときのパターンが悪いですか?

私は次のような状況があります。

generateHash(password){ 
    return new Promise((resolve, reject) => { 
     bcrypt.genSalt(10).then(salt => { 
      bcrypt.hash(password, salt).then(hash => { 
       resolve(hash) 
      }).catch(reject) 
     }).catch(reject) 
    }) 
} 

generateHash()は、ハッシュされたパスワードを含む約束を返さなければなりません。 .genSalt()は約束を返し、.hash()も返します。私が必要とするものは、.hash()によって返される約束を返すためにgenerateHash()ですが、それは内部の.genSalt()なので、このようなことは起こりません。私は、この関数がカスタムの約束を返し、その中にあるすべてのものが完全に機能していたと思っていましたが、そのような入れ子の約束が悪い習慣であり、ひどい考え方であるかどうか疑問に思っています。私がやった

もう一つは、そのようなコールバックを使用して、それより伝統的な方法でアプローチです:

return new Promise((resolve, reject) => { 
     bcrypt.genSalt(10, function (err, salt) { 
      bcrypt.hash(password, salt, function (err, hash) { 
       if (err) return reject(err) 
       resolve(hash) 
      }); 
     }); 
    }) 

私は優れていると種類の方法についてのアイデアそう約束に固執したい方法の提案に開いています可能な限り最善の方法を約束してそれをすることは大いに感謝されます。

答えて

1

すでに使用しているメソッドが約束を返す場合は、独自の約束を作成する必要はありません。次のコードは、自分で約束を作成せずに、コンソールに生成したハッシュ値を記録します:あなたは、内側の関数を返す必要が

const bcrypt = require("bcrypt") 
function generateHash(password){ 
    return bcrypt.genSalt(10).then(salt => { 
      return bcrypt.hash(password, salt).then(hash => { 
       return hash; 
      }) 
     }) 
} 

generateHash("foo").then(v => console.log(v)); 

注 - そう基本的に、コードは

function generateHash(password){ 
    return bcrypt.genSalt(10).then(salt => bcrypt.hash(password, salt)); 
} 
に煮詰めるでしょうが
1

なぜ約束を約束に入れますか?

あなただけはい、

generateHash(password){ 
    return bcrypt.genSalt(10) 
       .then(salt => bcrypt.hash(password, salt)) 
} 
+0

ああを行うことができます。私は寝るべきだ。私は本当にそれがどうやって明らかではなかったのか分かりません。みんなありがとう! –

+0

リファクタリングに関する提案はありますか? :) 'のregisterUser(NEWUSER){ \t \t \tリターン新しいプロミス((決意、リジェクト)=> { \t \t \t \t encryption.generateHash(newUser.password) \t \t \t \t \t .then((ハッシュ)=> { \t \t \t \t \t \t newUser.password =ハッシュ \t \t \t \t \t \tリターンUser.create(NEWUSER).then(解決).catch(拒否) \t \t \t \t \t}) \t \t \t \t \t .catch((エラー)=> { \t \t \t \t \t \tコンソール。ログ(エラー) \t \t \t \t \t}) \t \t \t}) \t \tは} ' –

+0

ネヴァーマインドは、それを修正します。ベッドに直進。信じられないほどの睡眠不足があなたにします。 –

関連する問題