【发布时间】:2017-08-03 22:13:45
【问题描述】:
我想知道我在编写自定义承诺时是否使用了不好的做法。
我有以下情况。
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() 也是如此。我需要的是 generateHash() 来返回 .hash() 返回的承诺,但由于它在 .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)
});
});
})
我对哪种方式更好的建议持开放态度,并且希望坚持承诺,因此非常感谢有关如何以最好的方式使用承诺来做到这一点的想法。
【问题讨论】:
标签: javascript node.js ecmascript-6 es6-promise