gpt4 book ai didi

javascript - 编写 Promise 时的错误模式?

转载 作者:行者123 更新时间:2023-12-02 13:43:36 24 4
gpt4 key购买 nike

我想知道在编写自定义 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com