【问题标题】:async / await handling error in node js mongodb节点js mongodb中的异步/等待处理错误
【发布时间】:2019-10-27 17:45:00
【问题描述】:

我在我的节点中使用异步函数,这里我用 mongodb 调用多个查询

(即):

let data1;
let data2;
try{
       data1 = await mongoQuery1
  }catch {
       res.send(error)
  }
try{
      data2 = await mongoQuery2 
  }catch {
       res.send(error)
  }
  res.send({ data1, data2 });

我对这个流程感到困惑。所以,基本上我想发送给用户的只是data1data2 但是如果query1 失败会发生什么,因为它显然会落在第一个catch块中并向用户发送响应,然后继续执行下一个 try 块,并再次发送响应,这是完全错误的。我怎样才能做到这一点,我想要的是如果任何捕获中发生任何错误我想将错误响应发送回用户

如果所有的 try 块都成功了,那么我只想将成功响应发送回用户,我该如何实现呢?

【问题讨论】:

  • 只是return 在第一次 res.send 之后?

标签: javascript node.js mongodb mongoose async-await


【解决方案1】:

目前还不清楚您要做什么。

如果您想停止并仅发送错误,那么您可以在调用res.send 后通过return 停止函数继续执行。

如果您想将错误与其余数据一起发送,然后不要立即调用res.send,将错误存储在data1,然后发送最后还是正常的。

【讨论】:

    【解决方案2】:

    在您的场景中使用 Promise.all 的建议: 两个查询将同时运行,如果出现错误,它将立即抛出并到达 catch 块。

    try {
        const [data1, data2] = await Promise.all([mongoQuery1, mongoQuery2]);
        res.send({ data1, data2 })
    } catch {
        res.send(error)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 2018-06-11
      • 2022-01-09
      • 2018-04-06
      • 2018-11-12
      • 1970-01-01
      • 2017-05-25
      相关资源
      最近更新 更多