gpt4 book ai didi

javascript - 尽管在我的 Controller 中使用了await,为什么我还是收到Promise Pending?

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:48 26 4
gpt4 key购买 nike

我有一个存储库,我直接连接到我的模型以插入一些数据,它成功创建了数据,但是当我将 Controller 连接到此存储库时,我得到一个空响应,如果我将其记录到存储库本身中,我会得到 Promise 。请查看下面我的代码:-

Repository.js

exports.register = (request) => {
const data = UserModel.findOne({email: request.email})
.then(user => {
if(user)
{
return {status: 400, message: 'Email Already exist'}
} else {
return bcrypt.genSalt(10, (err, salt) => {
const newUser = new UserModel({
username: request.username,
email: request.email,
password: request.password
});

return bcrypt.hash(newUser.password, salt, async (err, hash) => {
if(err) throw err;
newUser.password = hash;
return newUser.save()
.then(user => {
const token = jwt.sign({id: user._id}, process.env.JWT_SECRET, {
expiresIn: 86400 // expires in 24 hours
});
return {status: 200, message: 'Successfully Registered', auth: true, token: token, user: user}
})
.catch(err => {
return {status: 400, message: err}
})
})
})
}
})

console.log(data) // This part is return Promise <pending>
return data;
};

Controller.js

exports.SeedRegisteration = async (req, res, next) => {
try {
let element = await userRepo.register({username: "Testin", email: "Testin@test.com", "password":
"joe" });
return await res.status(200).json({ status: 200, data: element })
} catch (e) {
return res.status(400).json({ status: 400, message: e.message });
}
};

工作正常,但不返回数据

最佳答案

这是使用 Promise 版本的 bcrypt 的 register 函数(如果您不提供回调,bcrypt 函数将返回 Promise

exports.register = (request) => 
UserModel.findOne({
email: request.email
})
.then(user => {
if (user) {
throw 'Email Already exist'
}
})
.then(() => bcrypt.genSalt(10))
.then(salt => {
const newUser = new UserModel({
username: request.username,
email: request.email,
password: request.password
});

return bcrypt.hash(newUser.password, salt)
.then((hash) => {
newUser.password = hash;
return newUser.save();
})
}).then(user => {
const token = jwt.sign({
id: user._id
}, process.env.JWT_SECRET, {
expiresIn: 86400 // expires in 24 hours
});
return {
status: 200,
message: 'Successfully Registered',
auth: true,
token: token,
user: user
}
}).catch(err => {
return {
status: 400,
message: err
}
});

注意:有一个嵌套的 .then - 如果您在 register 中使用 async/await,这段代码可能会非常平坦 - 但是我不准备对答案执行如此大的重写。现在代码位于一个漂亮的几乎平坦的 promise 链中,将整个事情转换为 async/await 风格相对简单

关于javascript - 尽管在我的 Controller 中使用了await,为什么我还是收到Promise Pending?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335691/

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