在React JS中使用访存处理响应状态

kurniawan26

我刚刚开始学习ReactJS。现在,我想知道在使用fetch发出API请求时如何处理响应状态。这是我的代码:

componentDidMount(){
    this.setState({ isLoading: true })
    var id = this.props.match.params.id        

    const api = `bla/bla/${id}`;

    console.log("start call api")
    fetch(api)
        .then((response) => {
            if(response.status === 200){
                console.log("SUCCESSS")
                return response.json();     
            }else if(response.status === 408){
                console.log("SOMETHING WENT WRONG")
                this.setState({ requestFailed: true })
            }
        })
        .then((data) => {
            this.setState({ isLoading: false, downlines: data.response })
            console.log("DATA STORED")
        })
        .catch((error) => {
            this.setState({ requestFailed: true })
        })
    console.log("end call api")
}

我关闭了连接以进行的测试408,但仍然显示我的负载。

render(){
     const { isLoading, requestFailed } = this.state;
      if(requestFailed){
        return( 
            <div className="errorContainer">
                <a className="errorMessage">Opss.. Something went wrong :(</a>
            </div>
        )
    }
}

这是我的浏览器中的日志: 在此处输入图片说明

有解决这个问题的想法吗?

查尔斯·欧文

根据MDN文档:

https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch

当遇到网络错误或在服务器端未正确配置CORS时,fetch()承诺将以TypeError拒绝,尽管这通常意味着权限问题或类似问题,例如404并不构成网络错误。准确检查成功的fetch()包括检查已解决的诺言,然后检查Response.ok属性的值为true。代码看起来像这样:

fetch('flowers.jpg').then(function(response) {
   if(response.ok) {
     return response.blob();
 }
 throw new Error('Network response was not ok.');
}).then(function(myBlob) { 
   var objectURL = URL.createObjectURL(myBlob); 
   myImage.src = objectURL; 
}).catch(function(error) {
 console.log('There has been a problem with your fetch operation: ', 
 error.message);
});

查看您的代码,我认为您的408错误检查永远不会运行。我认为事实并非如此。基本上,上面的代码正在执行的操作是,如果请求为200ish正常,则返回json响应,否则将引发错误。如果发生错误,那么您的第二个错误将永远不会运行,并且会被扔到catch块中。也许您可以在其中设置isLoading:false?

另外,您在api的结尾的日志语句不正确。这是在您的诺言完成之前被调用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在react-native中使用访存时,如何获取响应状态?

在React中使用访存加载多个URL

无法访问React Native中访存内部的状态

使用sinon嘲笑POST请求的访存API,为react.js应用程序开玩笑

如何使用Typescript和访存处理204状态?

如何从访存REACT.js中显示地图功能

在React Native中使用多个复选框处理状态

如何使用React Native上的访存功能登录API并捕获登录错误?

使用React useState如何访问从访存API返回的数组的键值

在react-admin中,当我使用访存获取数据时如何更新当前视图?

在React.js表单组件中使用状态或引用?

在React事件处理程序中使用参数来处理特定状态

如何从Identity Server击中令牌端点获取访问令牌,如何使用访存从React客户端传递凭据?

如何在React-Native中使用访存在ComponentDidMount内部执行多个API调用?

处理错误响应React.js

React Js:处理状态中的嵌套元素

如何使用React Router处理登录状态?

在React中设置响应处理程序,然后在scss中使用它们

如何在处理函数的 setInterval 中使用 React 状态变量

在 React 中使用钩子作为参数进行多个函数调用时处理状态

不要直接改变状态,在React JS中使用setState()react / no-direct-mutation-state

无法在 React 中使用 fetch 获得响应

如何在querySelector中使用React状态

在 typecipt 中使用有状态的 React 类

在 React 中使用 useEffect 来管理状态

在 React 中使用变量更新状态

如何在Hibernate查询语言中使用访存

在授权标头和CORS中使用访存

在React JS中使用find()