当我执行功能'request'并提交一个api不会返回200的数字时,我会在应用程序中遇到错误。为什么渔获未捕获有错误?
答案 0 :(得分:1)
从fetch()返回的承诺不会拒绝HTTP错误状态 即使响应是HTTP 404或500,它也会解析 通常(将ok状态设置为false),并且只会在 网络故障或是否有任何阻止请求完成的事情。
所以您应该检查response.ok:
fetch(request, { method: 'GET' }).then(response => {
return response.ok
? response.json()
: Promise.reject(new Error('Response not ok'));
});
答案 1 :(得分:0)
您似乎没有任何try语句来触发捕获。
你必须有类似的东西
try{
code to test
}
catch...
答案 2 :(得分:0)
我建议您,例如说@fab put try ...捕获整个请求功能:
request(texto) {
try{ // Added
var request = "https://reqres.in/api/users/"+texto;
fetch(request, {method: "GET"})
.then((response) => {
return response.json();
})
.then((responseJson) => {
// Actualizar el state con la respuesta
//console.log(this.error);
this.setState({nombre:responseJson.data.first_name})
})
.catch((error) => {
// Actualizar el state indicando que los datos son erróneos
console.log(error);
this.setState({nombre:error})
}).done();
}
requestCrear(nombre) {
var request = "https://reqres.in/api/users";
t(request, {method: "POST", headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}, body: JSON.stringify({name: nombre})})
.then((response) => {
return response.json();
})
.then((responseJson) => {
// Actualizar el state con la respuesta
this.setState({nombre:responseJson.name})
})
.catch((error) => {
// Actualizar el state indicando que los datos son erróneos
this.setState({nombre:error})
}).done();
}
render() {
return (
<View style={{ padding: 60}}>
<TextInput
style={{height: 40}}
placeholder="Escribe un número para consultar"
onSubmitEditing={
(event) => {
this.request(event.nativeEvent.text)
}
}
/>
<TextInput
style={{height: 40}}
placeholder="Escribe un nombre para añadir una persona"
onSubmitEditing={
(event) => {
this.requestCrear(event.nativeEvent.text)
}
}
/>
<Text style={{padding: 20, fontSize: 42}}>
{this.state.nombre}
</Text>
</View>
);
}catch (e) { // Added
console.log(e);
// Here evaluate the error (e) ;
}
}