React 中 api 请求的错误处理

Posted

技术标签:

【中文标题】React 中 api 请求的错误处理【英文标题】:Error handling for an api request in React 【发布时间】:2021-12-29 10:27:30 【问题描述】:

我正在尝试通过 api 调用处理错误。目标是仅在后端成功响应时才显示按钮。否则不显示按钮。但是,即使出现错误,按钮也会显示。这是我的代码:

handleSubmit = (e) => 
     const 
       firstName, lastName, country, region, address, city, actions
      = this.props;

     e.preventDefault();

     verify(firstName, lastName, address, city, region, country)
       .then((data) => 
         actions.showSuccessNotification(data);
       , () => 
         this.setState(
           ...this.state,
           triggerShowButton: true
         );
       );
   

这里是我渲染按钮的地方:

 (triggerShowButton ) && <Button className=classes.button onClick= disabled=kycLevelTwoVerified variant="contained" color="primary">Proceed</Button> 

功能

验证

是直接来自另一个文件的函数。我导入了它。这里是:

async function verifyLevelOne(firstName, lastName, addressLine1, city, region, country) 
  const options = 
    method: 'POST',
    headers: 
      'content-type': 'application/json'
    ,
    data: 
      firstName,
      lastName,
      addressLine1,
      city,
      region,
      country
    ,
    url: `$BASE/level1`
  ;
  return axios(options);

上面的代码可能不相关,但我只是在此处显示以防万一。有什么方法可以使按钮仅在成功响应时可见?

【问题讨论】:

【参考方案1】:

它总是正确的,因为你在告诉它

, () => 
         this.setState(
           ...this.state,
           triggerShowButton: true
         );

您可能应该使用if 声明来检查服务器的状态或使用.catch() 以防出现错误

像这样

verify(firstName, lastName, address, city, region, country)
       .then((data) => 
         actions.showSuccessNotification(data);
       ,() => 
         this.setState(
           ...this.state,
           triggerShowButton: true
         ).catch((error) => 
           //handle error
           console.log(error)
         )

或替代解决方案

verify(firstName, lastName, address, city, region, country)
       .then((data) => 
         actions.showSuccessNotification(data);
       ,() => 
         if(dataIsVerified) // dataIsVerified = you need to check if the data is ok it's up to you i just made it up
         this.setState(
           ...this.state,
           triggerShowButton: true
         )
     else throw "error"

【讨论】:

以上是关于React 中 api 请求的错误处理的主要内容,如果未能解决你的问题,请参考以下文章

Axios 承诺处理 - 在 react-native 中获取“可能的未处理承诺拒绝 - 类型错误:网络请求失败”

React:使用 API 从 Prisma 获取数据时出现未处理的错误 500

为啥我不应该使用 catch() 来处理 React useEffect API 调用中的错误?

在 react-redux 应用程序中使用默认错误处理管理 API 调用

在 expo/react-native 中发送图像时随机出现“错误处理请求正文”

react-native 错误:[未处理的承诺拒绝:错误:获取 Expo 令牌时遇到错误:TypeError:网络请求失败。]