首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在从try/catch块中的异步/等待模式读取响应

正在从try/catch块中的异步/等待模式读取响应
EN

Stack Overflow用户
提问于 2021-09-23 02:07:39
回答 3查看 227关注 0票数 0

我在try/catch块中使用async/await模式发出API请求。

代码语言:javascript
运行
复制
async myRequest(data) {

  try {

    await api.post('/my-endpoint/', data).then((response) => { 

        console.log(response.data)
    });

  } catch (ex) {

     // WANT TO READ RESPONSE DATA HERE
  }
}

如果请求成功且没有错误,我就能够使用.then()方法读取response

如果请求失败,此接口将返回触发try/catch异常的422代码。

但是,如果请求失败,此接口仍然会在响应体中返回一些我想读取但无法读取的数据,因为catch被触发,而.then()从未运行。

如何从catch块内的异步函数获取响应体?

EN

回答 3

Stack Overflow用户

发布于 2021-09-23 02:13:59

error对象存储在ex中,因此您可以使用} catch (ex) { console.log(ex) }记录错误。您造成的一个问题是在调用.then之后将其放入。当您使用try-catch块时,您不需要执行then,因为您可以将结果保存到变量中。

try-catch块的优点之一是可以处理错误,并且可以执行多个异步调用

代码语言:javascript
运行
复制
async myRequest(data) {

  try {

    const response = await api.post('/my-endpoint/', data)
    console.log(response.data)
  } catch (ex) {

     console.log(ex)
  }
}
票数 0
EN

Stack Overflow用户

发布于 2021-09-23 03:06:34

如果要从catch块检索响应数据,可以在技术上做到这一点。

请参见以下代码。

代码语言:javascript
运行
复制
const myRequest = async () => {
    try {
      const data = await fetch('https://jsonplaceholder.typicode.com/xxx/1').then((result)=> {
     

       // You can change the status code to 422 
       if (result.status === 404) {
         throw new Error('You can put your data here.')
         // Make sure the argument you passed in Error is a string 
       }

      return result.json()
    })
      
    } catch(e){
      console.log(e.message);
    }
}

myRequest()

票数 0
EN

Stack Overflow用户

发布于 2022-02-18 16:56:02

如果您使用的是Axios lib,请尝试以下操作:

代码语言:javascript
运行
复制
catch (e) {
  console.log(e.response.data);
}

console.log使用toString方法来格式化错误对象,因此如果只记录e(错误),就很难找到response属性。文档:https://axios-http.com/docs/handling_errors

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69293183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档