如何编写异步axios的typescript?以及如何使用try/catch

mpgws1up  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(158)

我正在尝试找出写typescript async axios请求的最好方法。如果每个函数都应该有自己的try/catch块吗?如果是,我应该如何输入函数的结果?
对于try/catch块,其类型为:Promise<ExpectedType | undefined>如果没有try/catch块,则类型为Promise<ExpectedType>
下面是一个示例:

async function v1(): Promise<ExpectedType> {
  const response = await axios.get('https://...')
  return response.data
}

async function v1Copy(): Promise<ExpectedType> {
  const response = await axios.get('https://...')
  return response.data
}

async function v2(): Promise<ExpectedType | undefined> {
  try {
    // I could use object destructuring for 'data' but ignore this for now
    const response = await axios.get('https://...')
    return response.data
  } catch (e) {
    // how to handle this safely
    const error = e as AxiosError | Error
    if (error instanceof AxiosError) {
      if (error.response) {
        console.error(`axios error: ${error.response.status} ${error.response.statusText}`)
      } else {
        console.error(`axios error: ${error.message}`)
      }
    } else {
      console.error(`generic error: ${error.message}`)
    }
  }
}

现在,当我需要在代码的另一部分使用v1 / v1Copy时,我必须将它 Package 在try catch/catch块中。这是显而易见的。
最好的方法是什么?

...
try {
  const v1Result = await v1()
  const v1CopyResult = await v1Copy()
  // use v1Result and v1CopyResult
} catch(e) {}

...
const v2Result = await v2()
if (typeof v2Result !== 'undefined') {
  // here should be a typeguard, right?
  // use v2Result
}

可以在同一个try/catch块中使用v1v1Copy吗?谢谢...我正在尝试找到处理这个问题的最佳方法,并了解原因。

webghufk

webghufk1#

我认为最好的方法是将每个函数 Package 在它自己的try/catch块中,这样如果一个承诺被拒绝,整个代码就不会崩溃。

相关问题