处理 Mongoose 异步/等待调用中的错误

Posted

技术标签:

【中文标题】处理 Mongoose 异步/等待调用中的错误【英文标题】:Handling errors in Mongoose async/await call 【发布时间】:2020-05-24 17:58:10 【问题描述】:

我有一个异步函数,它通过 ID 查找 Mongoose 文档并将其删除。我的问题是,是否可以只使用一个 catch 子句来处理任何错误,或者我也应该发送一个回调(以捕获任何 Mongoose 错误?)。

const myAsyncFunction = async (req, res) => 
    try 
      await myModel.findByIdAndDelete(req.params.docId)
      req.flash('info', 'Document was deleted.')
      res.redirect('/')
     catch (error) 
      console.log(error)
    

或者我应该有

   await myModel.findByIdAndDelete(req.params.docId, function (error, user) 
        if (error) 
        // etc
            
    )

【问题讨论】:

【参考方案1】:

Moongoose 默认具有回调样式函数。在您的情况下,您需要添加 .exec() 以便能够 await 它并捕获异常。所以像这样的

const myAsyncFunction = async (req, res) => 
    try 
      await myModel.findByIdAndDelete(req.params.docId).exec();
      req.flash('info', 'Document was deleted.')
      res.redirect('/')
     catch (error) 
      console.log(error)
    

【讨论】:

以上是关于处理 Mongoose 异步/等待调用中的错误的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 中的 Model.findById() - 异步/等待 [重复]

基于任务的异步编程模式(TAP)的错误处理

Mongoose ORM 异步等待

异步 Mongoose 调用

Mongoose与bluebird结合使用实例

如何确保在从 Mongoose 中的函数返回之前执行异步调用?