Node.js 将简单回调转换为异步等待
我发现很难将此用户控制器代码转换为异步等待。有人能帮助我,指导我怎么做吗。因此,我还可以将任何回调更改为异步等待。 另外,如果有人能提供一个好的源代码,以便我可以阅读有关AsyncWait以及如何正确应用它们的内容Node.js 将简单回调转换为异步等待,node.js,express,Node.js,Express,我发现很难将此用户控制器代码转换为异步等待。有人能帮助我,指导我怎么做吗。因此,我还可以将任何回调更改为异步等待。 另外,如果有人能提供一个好的源代码,以便我可以阅读有关AsyncWait以及如何正确应用它们的内容 const User = require("../models/user") exports.getUserById = (req, res, next, id) => { User.findById(id).exec((error, user)
const User = require("../models/user")
exports.getUserById = (req, res, next, id) => {
User.findById(id).exec((error, user) => {
if (error || !user) {
return res.status(400).json({
error: "No user was found in DB"
})
}
req.profile = user
next()
})
}
exports.getUser = (req, res) => {
req.profile.salt = undefined;
req.profile.encrypted_password = undefined;
return res.json(req.profile)
}
exports.getAllUsers = (req, res) => {
User.find().exec((error, users) => {
if (error || !users) {
return res.status(400).json({
error: "No users was found in DB"
})
}
return res.json(users)
})
}
exports.updateUser = (req, res) => {
User.findByIdAndUpdate(
{ _id: req.profile._id },
{ $set: req.body },
{ new: true, useFindAndModify: false },
(error, user) => {
if (error) {
return res.status(400).json({
error: "You are not authorized to update this info"
})
}
user.salt = undefined;
user.encrypted_password = undefined;
res.json(user)
}
)
}
它应该是这样的:
const User = require("../models/user");
exports.getUserById = async (req, res, next, id) => {
let user = await User.findById(id);
try {
if (!user) {
return res.status(404).json({
error: "No user was found in DB"
});
}
req.profile = user;
next();
} catch (err) {
return res.status(500).json({
error: "Something went wrong"
});
}
};
exports.getUser = (req, res) => {
req.profile.salt = undefined;
req.profile.encrypted_password = undefined;
return res.json(req.profile);
};
exports.getAllUsers = async (req, res) => {
let users = await User.find();
try {
if (users.length < 1) {
return res.status(404).json({
error: "No users was found in DB"
});
}
return res.json(users);
} catch (err) {
return res.status(500).json({
error: "Something went wrong"
});
}
};
exports.updateUser = async (req, res) => {
try {
let user = await User.findByIdAndUpdate(
{ _id: req.profile._id },
{ $set: req.body },
{ new: true, useFindAndModify: false }
);
user.salt = undefined;
user.encrypted_password = undefined;
return res.json(user);
} catch (err) {
return res.status(400).json({
error: "You are not authorized to update this info"
});
}
};
const User=require(“../models/User”);
exports.getUserById=async(req、res、next、id)=>{
let user=wait user.findById(id);
试一试{
如果(!用户){
返回res.status(404.json)({
错误:“在数据库中找不到用户”
});
}
req.profile=用户;
next();
}捕捉(错误){
返回res.status(500).json({
错误:“出了点问题”
});
}
};
exports.getUser=(请求、回复)=>{
req.profile.salt=未定义;
req.profile.encrypted_password=未定义;
返回res.json(请求配置文件);
};
exports.getAllUsers=异步(请求、回复)=>{
let users=等待User.find();
试一试{
if(users.length<1){
返回res.status(404.json)({
错误:“在数据库中找不到用户”
});
}
返回res.json(用户);
}捕捉(错误){
返回res.status(500).json({
错误:“出了点问题”
});
}
};
exports.updateUser=async(请求、回复)=>{
试一试{
let user=wait user.findByIdAndUpdate(
{{u id:req.profile.{u id},
{$set:req.body},
{new:true,useFindAndModify:false}
);
user.salt=未定义;
user.encrypted_password=未定义;
返回res.json(用户);
}捕捉(错误){
返回res.status(400).json({
错误:“您无权更新此信息”
});
}
};
如果在数据库中找不到任何用户,则应发回
404
错误400意味着糟糕的请求。您可以通过用Promise包装函数来实现您的要求。在您的示例中,您应该使用Ifaruki给出的解决方案,因为mongoose已经支持承诺
function waitSeconds(seconds) {
return new Promise(res => {
setTimeout(() => {
res();
}, seconds * 1000)
})
}
async function foo() {
console.log("Hello");
await waitSeconds(5);
console.log("World");
}
您可以在javascript中了解有关异步的更多信息如果我们使用异步,我认为我们不能使用execawait@ABHISHEKBARTHWAL是的,移除it@lfaruki你能推荐我能找到的任何来源吗learn@ABHISHEKBARTHWAL博客、教程、私人项目。最重要的是对javascript有一个坚实的理解。还可以阅读他们在小示例中使用的await
的文档