Javascript try/catch未捕获错误

wgx48brx  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(257)

我有一个这样的函数

const myFunction = async function (arg1,arg2) {

**update**
I am casting arg2 into a variable called 'command'

const command = arg2 as {
      api_base_url: string
      session_id: string      
    }
**end of update**

try {
const url = `${command.api_base_url}/rest/api/latest/projects/`
const getData= await axios.get(url)
}
catch (error) {
    context.log(error)
  }
}

当我以arg2的形式传递一个空对象时,这意味着url变量从未被创建,因此get请求从未被发出。
但是没有抛出错误!如何确保arg2为空或无法创建url变量时出错?
我认为try/catch会自动这样做,但我想我的理解是不正确的。

arknldoa

arknldoa1#

在您的示例中,如果将空对象作为arg2参数传递,则不会定义url变量,但try和catch语句不会捕获此错误。相反,您可以在尝试创建url变量之前添加一个检查,以查看arg2参数是否为空对象,如下所示:

const myFunction = async function (arg1,arg2) {
  try {
    if (Object.keys(arg2).length === 0) {
      throw new Error("arg2 is an empty object");
    }
  
    const url = `${arg2.api_base_url}/rest/api/latest/projects/`
    const getData= await axios.get(url)
  }
  catch (error) {
    context.log(error)
  }
}

使用此更改后,如果将空对象作为arg2参数传递,则将引发Error并由catch块捕获,并记录错误消息。
或者,您可以在尝试创建url变量之前添加一项检查,以查看arg2对象是否具有API_base_url属性,如下所示:

const myFunction = async function (arg1,arg2) {
  try {
    if (!arg2.api_base_url) {
      throw new Error("arg2 is missing the api_base_url property");
  }
  
    const url = `${arg2.api_base_url}/rest/api/latest/projects/`
    const getData= await axios.get(url)
  }
  catch (error) {
    context.log(error)
  }
}

通过此更改,如果arg2对象缺少API_base_url属性,则将引发Error并由catch块捕获,并记录错误消息。

bbmckpt7

bbmckpt72#

如果传入一个空对象作为arg2,则URL将为undefined/rest/api/latest/projects,并且请求将针对该URL发出。

相关问题