Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使发生错误,也尝试捕获不工作_Javascript_Reactjs_Try Catch - Fatal编程技术网

Javascript 即使发生错误,也尝试捕获不工作

Javascript 即使发生错误,也尝试捕获不工作,javascript,reactjs,try-catch,Javascript,Reactjs,Try Catch,我有一些在提交表单时执行的代码。 它发布到一个API路由 handleSubmit = async () => { try { const response = await fetch(`${API_URL}/project`, { method: "post", body: JSON.stringify({ name: this.state.name, description: this.st

我有一些在提交表单时执行的代码。 它发布到一个API路由

  handleSubmit = async () => {
    try {
      const response = await fetch(`${API_URL}/project`, {
        method: "post",
        body: JSON.stringify({
          name: this.state.name,
          description: this.state.description
        }),
        headers: { "Content-Type": "application/json" }
      });
      return response ? response.json() : response;
    } catch (error) {
       console.log(error)
    }
  };
问题是,在测试此功能时,我将API路由更改为故意无效的路由,以导致错误。但是,catch代码没有被命中。
我是否设置了try-catch错误?

您面临的问题是,接收404并非例外。要处理这个问题,您应该添加一些代码来检查响应的状态代码,并从中确定应该做什么。例如,您将收到响应并使用以下命令:

if(response.status == 404)
    //Code for not receiving the content you expect
问题是,您可能会得到很多潜在的响应,而这些响应不是您想要的,因此我建议您将特定的响应范围列为白名单,而不是查找有问题的响应范围。比如说

if(response.status >= 200 && response.status <= 299)
    //Code to run when you receieve a good response

if(response.status>=200&&response.status
fetch
仅在生成或接收响应时才会引发错误。HTTP 404应被视为“成功”响应,并由用户决定如何处理此类响应

如果您想要拒绝非20x响应,并且您已经有了处理
catch
代码错误的业务逻辑,您可以抛出一个新错误,并将其与其他错误一起处理:

try {
    const response = await fetch(`${API_URL}/project`, {
    ...
    if (response.status >= 200 && response.status < 300) {
        return response.json()
    } else {
        var error = new Error(response.statusText || response.status)
        error.response = response
        throw(error)
    }
} catch (error) {
   console.log(error)
}
试试看{
const response=wait fetch(`${API\u URL}/project`{
...
如果(response.status>=200&&response.status<300){
返回response.json()
}否则{
var error=新错误(response.statusText | | response.status)
error.response=响应
抛出(错误)
}
}捕获(错误){
console.log(错误)
}

如果您需要获取特定错误,则必须按照以下方法操作:

handleSubmit = () => {
    fetch(`${API_URL}/project`, {
        method: "post",
        body: JSON.stringify({
            name: this.state.name,
            description: this.state.description
        }),
        headers: { "Content-Type": "application/json" }
    }).then((response) => {
        return response ? response.json() : response;
    }).catch((error) => {
        console.log(`fetch specific error: ${error}`)
    });
};

您是否尝试过检查网络流量以查看返回的内容?我不相信404将被视为异常,它只是一个您需要检查的响应。例如:是的,我返回404:那么什么将被视为异常?异常是基于未按预期运行的代码创建的特定对象。404在代码中并不是意外的,所以本质上你需要做的是检查响应状态代码,看看它是否等于404,然后从那里处理愿望。你可能也想在其中包括其他状态,例如200可能是唯一有效的响应