我想知道在编写自定义 promise 时是否使用了不良做法。
我有以下情况。
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() 必须返回一个包含哈希密码的 promise 。 .genSalt() 返回一个 Promise,.hash() 也是如此。我需要的是generateHash()来返回.hash()返回的 promise ,但由于它在.genSalt()内部,所以这种事情不会发生。我认为,如果该函数返回一个自定义 promise ,并且所有内容都位于其中,那么它就会完美地工作,而且确实如此,但我想知道这样的嵌套 promise 是否是一种糟糕的做法,总体而言是一个糟糕的想法。
我做的另一件事是通过使用回调来以更传统的方式处理它,如下所示:
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)
});
});
})
我愿意接受哪种方式更好的建议,并且有点想坚持 promise ,因此非常感谢有关如何以最佳方式实现 promise 的想法。
最佳答案
当您使用的方法已经返回 Promise 时,无需创建自己的 Promise。以下代码将把生成的哈希记录到控制台,而不需要您自己创建 Promise:
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));
}
关于javascript - 编写 Promise 时的错误模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771376/