【问题标题】:noting is working in catch block in node js注意在节点 js 中的 catch 块中工作
【发布时间】:2023-01-13 13:30:14
【问题描述】:

我有一个简单的快速服务器,其中我有功能,在这个功能中我尝试从 mongoDB 访问数据,这是代码

const  test =async()=>{
try{
    const data = await User.findOne({_id: "1234"})
}catch(err){
    const data = await User.findOne({_id: "4567"})
}

在此函数中,try 块工作正常但每当发生错误时 catch 块内的代码不起作用,我尝试在 catch 块中返回和 console.log() 也不起作用,这是代码

catch(err){
   console.log("hello")
}

或者

catch(err){
   return "hello"
}

在 catch 块中没有任何问题,我无法理解这个问题请帮助我

编辑

上面的代码是我的问题的简单示例实际代码如下

router.post("/", async (req, res) => {
  const data = req.body;
  data.time = new Date();
  data._id = uniqid();
  data.orderStatus = "Pending";
  const tradeData = await TradePara.create(data);
  try {
     algoTrade(data);
  } catch (err) {
    console.log(err);
  }
});

我遇到了 algoTrade 函数的问题,在这个函数中我用 axios 调用了一些 api

【问题讨论】:

  • 请在添加更多信息时更新问题 - 评论中回答的代码不提供解决方案的位置错误:-)
  • 一个可能的解释是,user.findOne 不会拒绝它在发生错误后返回的承诺,从而使返回的承诺永久挂起。

标签: javascript node.js mongoose exception try-catch


【解决方案1】:

我在 cmets 中看到您的代码存在问题。问题是没有实现 catch 块来捕获 try 块抛出的错误,因此代码终止像这样使用它

router.post("/", async (req, res) => {
    const data = req.body;
    data.time = new Date();
    data._id = uniqid();
    data.orderStatus = "Pending";
    const tradeData = await TradePara.create(data);
    try {
        algoTrade(data);
    } catch(e) {
        console.log("not working", e);
    }
});

而不是使用 catch{},实现 catch 块。

【讨论】:

  • 我试过这个,它不工作,它在终端上打印错误但它不打印控制台,日志语句
  • 我的目标不是在终端上打印错误,主要目标是在发生错误时将一些数据放入数据库中,这在 catch 块中不起作用
  • 只需将在数据库中存储数据的功能放在 catch 块中。每当抛出错误时,该函数就会运行。
  • 我试过这个但它不起作用,我在网上搜索并发现问题是我的函数本质上是异步的,这就是 catch 块永远不起作用的原因。我阅读了这篇文章 itnext.io/error-handling-with-async-await-in-js-26c3f20bc06a 并尝试了这些方法,但仍然无法解决问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2016-11-01
  • 2018-09-03
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多