程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Axios

    • Axios - 引入
    • Axios - 发送请求
    • Axios - config 配置
    • async/await 处理 Axios 请求
      • 一、async 和 await 的基本用法
      • 二、使用 async/await 发起 Axios 请求
      • 三、Axios 响应对象结构
      • 四、综合示例:多次请求处理
    • Axions - 拦截器
  • Axios
  • Axios
scholar
2024-08-16
目录

async/await 处理 Axios 请求

# async/await 处理 Axios 请求

在现代 JavaScript 开发中,async 和 await 提供了一种更为简洁、直观的方式来处理异步操作。由于 Axios 是基于 Promise 的 HTTP 客户端,它与 async/await 能够很好地结合使用,使得异步请求代码更加简洁易读。

# 一、async 和 await 的基本用法

在函数前加上 async 关键字后,该函数就会自动返回一个 Promise。在该函数内部,可以使用 await 来等待一个异步操作(如 Axios 请求)完成,并返回结果。

语法结构

// 使用 async 声明一个异步函数
async function fetchData(url) {
  try {
    // 使用 await 等待 Axios 的 Promise 完成,并获取响应
    const response = await axios.get(url);
    
    // 请求成功后,处理返回的数据
    console.log(response.data);
  } catch (error) {
    // 请求失败时,捕获并处理错误
    console.error('请求失败:', error);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

关键点:

  • async:用于声明异步函数,函数返回的是一个 Promise。
  • await:用于暂停异步函数的执行,直到 Promise 解决(resolved),返回结果。
  • try...catch:用于捕获可能在异步操作中抛出的错误,确保代码健壮性。

# 二、使用 async/await 发起 Axios 请求

示例:获取用户数据并处理响应

// 引入 Axios 库
import axios from 'axios';

// 定义一个异步函数,用于获取用户数据
async function getUserData(userId) {
  try {
    // 使用 await 等待 axios.get 请求完成
    const response = await axios.get(`https://api.example.com/users/${userId}`);
    
    // 请求成功后,处理返回的数据
    const userData = response.data;
    console.log('用户数据:', userData);
    return userData; // 返回获取到的数据
  } catch (error) {
    // 捕获并处理请求错误
    console.error('获取用户数据失败:', error);
    throw error; // 重新抛出错误,以便调用者进一步处理
  }
}

// 调用异步函数并处理返回的 Promise
getUserData(123)
  .then((data) => {
    // 成功获取数据时的处理逻辑
    console.log('数据获取成功:', data);
  })
  .catch((error) => {
    // 获取数据失败时的处理逻辑
    console.error('数据获取失败:', error);
  });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

关键点:

  • axios.get(url):发送一个 GET 请求,并返回一个 Promise。使用 await 可以暂停函数的执行,直到请求完成并返回结果。
  • response.data:Axios 的响应对象中,data 字段包含服务器返回的主要内容。
  • throw error:捕获到的错误重新抛出,以便调用者可以进一步处理错误。

# 三、Axios 响应对象结构

当 Axios 发起 HTTP 请求并接收到响应时,返回的响应对象结构通常如下:

{
  "data": { /* 服务器返回的主体内容 */ },
  "status": 200, // HTTP 状态码
  "statusText": "OK", // HTTP 状态文本
  "headers": { /* 服务器返回的响应头信息 */ },
  "config": { /* 请求时的配置信息 */ },
  "request": { /* 请求对象 */ }
}
1
2
3
4
5
6
7
8

重要字段说明:

  • data:包含服务器返回的实际数据,通常是需要处理的主要信息。
  • status:HTTP 状态码,例如 200 表示成功,404 表示资源未找到。
  • headers:包含服务器返回的响应头信息,例如内容类型、缓存控制等。
  • config:发送请求时的配置信息,例如请求 URL、请求方法、超时时间等。
  • request:表示请求的相关信息。

为什么通常从 response.data 获取数据?

  1. 数据所在位置:

    • 服务器返回的实际数据通常包含在 data 字段中。这个字段包含了服务器响应的主体内容。
    • 在大多数情况下,我们只关心从服务器接收到的数据,即 response.data。
  2. 状态码和其他信息:

    • status、statusText、headers 等字段提供了关于请求的更多上下文信息,例如请求是否成功、服务器返回的状态等。
    • 这些信息可能会在处理错误或调试时用到,但通常不在正常数据处理中使用。

# 四、综合示例:多次请求处理

// 引入 Axios 库
import axios from 'axios';

// 定义一个异步函数,依次获取多个用户的数据
async function getMultipleUsers(userIds) {
  try {
    // 使用 Promise.all 并发请求多个用户数据
    const requests = userIds.map(id => axios.get(`https://api.example.com/users/${id}`));
    const responses = await Promise.all(requests); // 等待所有请求完成

    // 处理所有返回的数据
    const userDataArray = responses.map(response => response.data);
    console.log('所有用户数据:', userDataArray);
    return userDataArray; // 返回用户数据数组
  } catch (error) {
    // 捕获并处理任何一个请求的错误
    console.error('获取多个用户数据失败:', error);
    throw error;
  }
}

// 使用异步函数调用并处理结果
getMultipleUsers([1, 2, 3])
  .then((data) => {
    console.log('成功获取到所有用户数据:', data);
  })
  .catch((error) => {
    console.error('请求过程中出错:', error);
  });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

关键点:

  • Promise.all:并发处理多个请求,所有请求都完成后返回结果数组。
  • 错误处理:即使是并发请求中的任何一个失败,都会进入 catch 块进行处理。

总结

  • async/await 提供了更直观的方式来处理异步请求,代码结构更接近同步代码。
  • 错误处理:在 async 函数中使用 try...catch 捕获并处理请求错误,使代码更健壮。
  • 返回数据:通常直接从 response.data 获取服务器返回的主体内容,简化业务逻辑。

通过合理使用 async/await,你可以编写更清晰、易维护的异步请求代码,提高代码的可读性和开发效率。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
Axios - config 配置
Axions - 拦截器

← Axios - config 配置 Axions - 拦截器→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式