首页 > 解决方案 > 重构为 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');
}

标签: node.jsexpressmongooseasync-await

解决方案


推荐阅读