为什么Catch没有捕获错误?

时间:2019-11-21 21:23:36

标签: javascript reactjs react-native

当我执行功能'request'并提交一个api不会返回200的数字时,我会在应用程序中遇到错误。为什么渔获未捕获有错误?

https://codeshare.io/5wWo9p

3 个答案:

答案 0 :(得分:1)

来自documentation

  

从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) ;
  }
}