javascript 节点js中的catch块正在运行noting

2ekbmq32  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(95)

我有一个简单的express服务器,其中我有函数,在这个函数中,我尝试从mongoDB访问数据,以下是代码

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

在此函数中,try块工作正常,但无论何时发生错误,catch块中的代码都不工作,我在catch块中有try return和console.log(),它们也不工作,以下是代码

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

catch(err){
   return "hello"
}

没有什么是不工作在捕捉块,我不能理解这个问题,请帮助我

gjmwrych

gjmwrych1#

代码中的问题是,您在catch块中重新声明了data变量,这意味着try块中声明的原始变量不再在作用域中,这就是return语句或console.log()不起作用的原因。
你可以通过从catch块返回值或者简单地将变量声明移出try-catch块来解决这个问题,如下所示:

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

}
或者

const test = async() => {
try {
    const data = await User.findOne({_id: "1234"});
    return data;
} catch(err) {
    console.log("hello")
}

}
通过这种方式,您将能够访问catch块中的数据变量,并对它执行任何您喜欢的操作,无论是返回它,还是将数据记录到控制台。

chy5wohz

chy5wohz2#

我在注解中看到了你的代码的问题。问题是没有实现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块。

相关问题