求助:使用Async/Await重写Mongoose嵌套回调查询
没问题,我帮你把这段嵌套回调的代码重构为更易读的Async/Await版本,彻底摆脱“回调地狱”的困扰!
改写后的代码
exports.post_edit_get = async function(req, res, next) { const id = req.params.id; // 先验证ID有效性 if (!mongoose.Types.ObjectId.isValid(id)) { return res.send("Invalid ID"); } try { // 用await等待POST查询完成,替代嵌套回调 const doc = await POST.findById(id); // 同样用await执行player查询 const players = await playerQuery.exec(); // 所有异步操作完成后渲染页面 res.render('posts/posts_admin', { title: pageTitle, formData: doc, players: players }); } catch (err) { // 统一捕获所有异步错误,交给错误处理中间件 return next(err); } };
关键改动说明
- 将处理函数声明为
async function,这是使用await的前提条件 - 移除了所有嵌套的回调函数,通过
await让异步操作按线性逻辑执行,代码结构更扁平、可读性更强 - 用
try/catch块统一处理所有异步操作的错误,替代了原代码中分散在每个回调里的错误判断,逻辑更集中 - Mongoose的查询方法(比如
findById)在不传入回调时会返回Promise,刚好适配await的使用场景
这样改写后,代码的执行流程一目了然,后续维护也会轻松很多!
内容的提问来源于stack exchange,提问作者user2001702
相关产品推荐
相关产品推荐

