alovajs / alova

Workflow-Streamlined next-generation request tools. Extremely streamline API integration workflow, just one step
https://alova.js.org
MIT License
2.96k stars 108 forks source link

[Bug]: useRequest无法同步返回错误信息 #592

Open DehaiWang opened 17 hours ago

DehaiWang commented 17 hours ago

Is this a Bug?

Has this issue been reported before?

Alova Version

3.2.4

Framework

Vue

Problem Description

全局模式下 responded 拦截器中在 onSuccess 函数中 根据后端返回值进行了判断, 如果后端返回的是失败或者错误,在 onSuccess 中 throw new Error, 但是对 useRequest 进行封装后无法拿到错误信息

代码如下:

 responded: {
    onSuccess: async (response) => {

      console.log('=======onSuccess=========')
      console.log(response)

      if (response.status != 200) {

        throw new Error('接口异常:' + response.status)
        // return {'reason':}
      }

      const jsonData = await response.json()
      // 根据后端约定,判断code值抛出对应的问题
      if (jsonData.success === 1) {
        return jsonData.datas
      }

      throw new Error('接口异常:' + jsonData.reason)
    },
}

封装 useRequest 的函数

export const getAa = () => {
  const {
    loading, // Ref<boolean>
    data, // Ref<{ data: any }>
    error, // Ref<Error>
    onSuccess,
    onError,
  } = useRequest(alovaInstance.Get<Resp>('/v5/aa2'));

  let errorBack: string = ''

  onSuccess(event => {
    console.log(event);
  })

  onError(event => {

    errorBack = event.error
    console.log(errorBack)
  })
  console.log(errorBack)
  console.log(error)

  return { data, error: errorBack }
}

封装后的函数 返回的err字段一直是空的,不符合期望。

Expected Behavior

1.期望能在 responded 拦截器中 onSuccess 函数能统一处理错误信息,如调用弹窗提示,

2.在对useRequest 封装后,希望能同步拿到 后端返回的正常数据 和 拦截器反馈的报错信息, 如: {data,err}的形式 界面中 可以根据err是否为空进行处理。 如果err不为空,则什么逻辑都不触发。 如果err为空,则对返回的data数据进行处理。

Reproduction Link

No response

Reproduction Steps

1.发起请求 2.获取到接口的数据 和 接口是否报错

System Information

1

Additional Information

2