如何处理fetch()中的错误请求

Muflix

我知道这是一个基本且经常发生的问题,但是我仍然无法使其正常工作。

我有以下代码

handleAdd = (event: any): void => {
        
    // ...
        
    // create new task
    try {
          // send data to backend
          fetch(`/api/tasks?name=${name}&priority=${priority}`, { method: 'post' })
                .then(response => { if (!response.ok) {  
                       throw new Error('error => how to get bad request message here?') } })
    }
    // handle exception
    catch (e) {
          console.log(e);
          this.setState({
               isError: true,
               errorMessage: e.message
          });
    }
}

API返回400,并显示一些错误消息

在此处输入图片说明

但是在浏览器中

在此处输入图片说明

所以我有两个问题

  • 为什么throw new Error()in fetch不会进入catch(e) {}方法(如果错误不在fetch函数之外,则效果很好)?如何重写此行以进入catch方法?我认为这与Promise对象有关吗?
  • 如何从响应对象中获取错误的请求消息?

更新,工作解决方案


fetch(`/api/tasks?name=${name}&priority=${priority}`, { method: 'post' })
    .then(response => {
        if (!response.ok) {
                  
            response.text().then(function (text) {
                throw Error(text);
            }).catch((e) => {
                this.setError(e.message);
            });

        }
    })
  • 如何使response.text()进入Error异常?
布扎托

使用Promise时,您可以选择使用then / catch链接您的Promise或使用async / await。

如果您要链接,请确保您要链接:

handleAdd = (event: any): void => {
    // send data to backend
    fetch(`/api/tasks?name=${name}&priority=${priority}`, { method: 'post' })
        .then(response => { if (!response.ok) {  
              throw new Error('error => how to get bad request message here?') } }
        ).catch((e) => {
            console.log(e);
            this.setState({
              isError: true,
              errorMessage: e.message
            })
        });
}

如果愿意,可以将功能更改为异步/等待。这样,您将使用try / catch块:

// mark your function as async
handleAdd = async (event: any): void => {

  try {
    // await your fetch response
    const response = await fetch(`/api/tasks?name=${name}&priority=${priority}`, { method: 'post' })
    if (!response.ok) {  
      throw new Error('error => how to get bad request message here?')
    }  
  }
  // handle exception
  catch (e) {
    console.log(e);
    this.setState({
          isError: true,
          errorMessage: e.message
    });
  }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理 node.js 请求中的 URI 错误?

来自分类Dev

如何处理Twisted中的POST请求?

来自分类Dev

如何处理来自 Rails 中 gems 的网络请求的渲染 json 错误?

来自分类Dev

如何处理承诺中的错误?

来自分类Dev

如何处理淘汰订阅中的错误

来自分类Dev

如何处理Shapely中的舍入错误

来自分类Dev

如何处理GRequests中的错误?

来自分类Dev

如何处理Retrofit 2.0中的错误

来自分类Dev

如何处理R降价中的错误?

来自分类Dev

如何处理Angular组件中的错误

来自分类Dev

如何处理NestJS中的TypeORM错误?

来自分类Dev

如何处理python中的递归错误?

来自分类Dev

如何处理python中的错误?

来自分类Dev

如何处理Haskell中的createProcess错误?

来自分类Dev

如何处理承诺中的错误?

来自分类Dev

如何处理execvp中的错误?

来自分类Dev

如何处理多个流中的错误?

来自分类Dev

如何处理mio中的错误?

来自分类Dev

如何处理python中的“回溯”错误?

来自分类Dev

如何处理spring集成中的错误

来自分类Dev

如何处理 Kafka Consumer 中的错误

来自分类Dev

如何处理 Django 中的错误

来自分类Dev

在 Alamofire 请求中使用 validate() 时如何处理错误?

来自分类Dev

如何处理HEAD请求?

来自分类Dev

如何处理批处理文件中的sqlplus错误

来自分类Dev

再处理中如何处理403 HTTP错误?

来自分类Dev

如何处理来自jquery中ajax请求的204响应

来自分类Dev

如何处理PUT请求中的“更改原因”?

来自分类Dev

如何处理多个在php中写入文件的请求?