node.js - 重构为 async/await
问题描述
我只是在学习如何使用 async/await 并试图重构我的回调以使用它。
我只是想知道我是否做得对......或者是否有人可以像你在和一个 10 岁的孩子说话一样向我解释。
这是我试图重构的代码
router.post("/", middleware.isLoggedIn, async function(req, res) {
//lookup book using id
var username = req.user.username;
var userId = req.user._id;
var available = req.body.available;
var daysToAdd = 2;
var reservedBy = {username: username, userId: userId, available: available};
Book.findById(req.params.id, function(err, book) {
if (err) {
console.log(err);
} else {
//create new reserve name
Reserve.create(reservedBy, function(err, reserve) {
if (err) {
console.log(err);
} else {
reservedBy.username)
// console.log("new reserves username " + reservedBy.available)
reserve.returnDate = reserve.borrowDate.setDate(reserve.borrowDate.getDate() + daysToAdd);
reserve.reserved.id = reservedBy.userId;
reserve.reserved.username = reservedBy.username;
// //save review
reserve.save();
//connect reserve user to book
//redirect to book show page
book.reserves.push(reserve);
if (book.available < 1) {
req.flash("error", "There are no more available books");
res.redirect("/library/" + book._id);
} else {
book.available--;
book.save();
res.redirect("/library/" + book._id);
}
}
});
}
});
});
这就是我到目前为止重构的内容..
try {
let book = await Book.findById(req.params.id);
let reserve = await Reserve.create(reservedBy);
reserve.returnDate = reserve.borrowDate.setDate(reserve.borrowDate.getDate() + daysToAdd);
reserve.reserved.id = reservedBy.userId;
reserve.reserved.username = reservedBy.username;
reserve.save();
book.reserves.push(reserve);
if (book.available < 1) {
req.flash("error", "There are no more available books");
res.redirect("/library/" + book._id);
} else {
book.available--;
book.save();
res.redirect("/library/" + book._id);
}
} catch(err) {
req.flash('error', 'Something went wrong!');
res.redirect('back');
}
解决方案
推荐阅读
- winapi - 如何检测是否连接了外部硬盘驱动器
- hybris - 当我将目录的暂存版本与在线版本同步时,媒体容器未同步
- python-3.x - 在 python 中处理 3D 图像
- python - 无法在熊猫中转换为日期时间
- c# - 如何使用 Json.NET 从 fixer.io 的响应中反序列化汇率?
- json - JSON文件无法反序列化
- reactjs - React Native - Firestore 获取特定数据
- vba - 访问表单复选框以更新另一个表中的日期
- javascript - 无法使用我的 React Native 应用程序注册 - 我的 API 有问题(也许?)
- javascript - 在图像上添加文本