有一个函数可以生成一个字符串,如果它在 User 表中则返回它。
function generateFortToken(len) {
let rs;
rs = randomstring.generate(len);
User.findOne({where: {fort_token: rs}})
.then(result => {
console.log("hit is : ", result);
if (!result) //need to return rs. but HOW?
})
.catch(err => {
console.log("Error search for fort token : ", err.message);
});
}
这个 generateFortToken
位于模块 helper
中,并从父函数中调用,如下所示:
user.fort_token = helper.generateFortToken(20);
由于 findOne
返回一个 promise,此代码无法像许多在线帖子指出的那样工作。但是我很难用回调重写它以返回生成的 token 的值。
最佳答案
您编写的代码很好,但还可以改进。特别是,你已经陷入了 Promise constructor antipattern .简而言之,当您可以使用 User.findOne< 返回的 promise 时,您正在构建一个新的 promise (
直接:await new Promise(next => User.findOne(...))
)/
async function generateFortToken(len) {
for (let rs;; rs = randomstring.generate(len)) {
try {
if (await User.findOne({ where: { fort_token: rs }})) {
return rs;
}
}
catch (err) {
console.log('Error search for fort token : ', err.message);
}
}
}
关于javascript - 如何用回调重写 promise 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842991/