VUE之await fetch与await axios.get的区别及说明

 更新时间:2026年07月06日 10:54:21   作者:Tzq@2018  
想知道用await fetch还是axios.get更好?这篇对比直接告诉你核心区别:fetch是原生API但需手动解析JSON和错误,而axios自动处理JSON、拦截HTTP错误,点击查看代码实例,学会如何用更少的代码完成请求

一、await fetch与await axios.get的区别

在 JavaScript 中,fetch 是原生的 Web API,用于发起 HTTP 请求(如 GET、POST),而 axios 是一个第三方库(基于 Promise 的 HTTP 客户端)。

两者都支持使用 await 语法(在 async 函数中)来处理异步操作,因为 fetch()axios.get() 都返回一个 Promise 对象。

以下是详细的区别:

1.1、核心区别

  • fetch: 它是浏览器内置的方法,不需要额外安装库。但使用时需要手动处理响应体和错误(例如,HTTP 错误状态码如 404 不会导致 Promise rejection;网络失败才触发拒绝)。响应的解析需要额外调用 .json().text() 方法。
  • axios.get(): 是 axios 库提供的专门方法(库需安装)。它内置自动 JSON 解析、错误自动化处理(任何非 2xx HTTP 状态码都会拒绝 Promise)、拦截器、请求取消等高级功能。API 更简洁,减少样板代码。

1.2、其他关键差异

错误处理

  • fetch: 仅当网络错误(如 CORS 失败、DNS 失败)时才拒绝 Promise;HTTP 错误(如 404)需手动检查。
  • axios: 任何非 2xx HTTP 状态码都会自动拒绝 Promise,简化错误捕获。

JSON 解析

  • fetch: 需要显式调用 .json() 方法来解析 JSON 响应。
  • axios: JSON 响应自动解析,数据可直接访问 response.data

易用性与功能

  • axios 提供额外功能(如拦截器、进度追踪),而 fetch 更轻量但需编写更多代码。

浏览器支持:

  • fetch 在较新浏览器原生支持(IE 不支持),而 axios 背后使用 XMLHttpRequestfetch,具有跨浏览器一致性。

二、代码示例

下面用 JavaScript 展示两者在 async/await 中的典型用法,处理一个 GET 请求到 “https://jsonplaceholder.typicode.com/posts/1”(这是一个公共 API)。

2.1、示例 1: 使用fetch实现

// 假设在 async 函数内
try {
  // 发起 GET 请求
  const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
  
  // 检查 HTTP 状态码:如果非 2xx,需手动抛出错误
  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`); // 如 404
  }
  
  // 解析 JSON 数据(fetch 要求显式解析)
  const data = await response.json();
  console.log('Fetch result:', data);
} catch (error) {
  // 捕获网络错误或手动抛出的错误
  console.error('Fetch error:', error.message);
}

解释

  • await fetch(...) 发起请求,返回一个 Response 对象。
  • response.ok 检查 HTTP 状态是否在 200-299 范围内(例如,404 不会被 await 拒绝)。
  • await response.json() 是必需的第二步,将响应体解析为 JSON。
  • 错误处理需手动处理非 2xx 状态(通过 if (!response.ok) 抛出),否则这些错误被视为成功响应。

2.2、示例 2: 使用axios.get()实现

// 安装 axios:npm install axios
const axios = require('axios'); // 或 import axios from 'axios';

// 假设在 async 函数内
try {
  // 发起 GET 请求,axios.get() 自动处理 JSON 解析和错误
  const response = await axios.get('https://jsonplaceholder.typicode.com/posts/1');
  
  // 数据直接存在于 response.data 中
  console.log('Axios result:', response.data);
} catch (error) {
  // 自动捕获网络错误或非 2xx HTTP 错误
  console.error('Axios error:', error.message); // 包括 404 等错误
}

解释

  • await axios.get(...) 直接返回完整数据(自动解析 JSON 到 response.data)。
  • 非 2xx HTTP 状态码视为错误(拒绝 Promise),无需手动检查。
  • 错误对象包含更多信息(如 error.response.status),便于调试。
  • 配置灵活(如请求头设置可通过 axios.get(url, { headers: ... }) 完成)。

三、总结

  • 优先使用 axios: 适合复杂请求、易用性(更少的代码、自动功能)和一致错误处理。
  • 使用 fetch: 当不想引入外部库时(如小型项目),但需注意手动错误和解析处理。

两者在 await 机制下都是异步的,核心区别在于易用性、特性和内置逻辑。axios 是更高级的封装,提供了更开发友好的体验。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue.js 左侧二级菜单显示与隐藏切换的实例代码

    vue.js 左侧二级菜单显示与隐藏切换的实例代码

    这篇文章主要介绍了vue.js 左侧二级菜单显示与隐藏切换的实例代码,需要的朋友可以参考下
    2017-05-05
  • vue利用better-scroll实现轮播图与页面滚动详解

    vue利用better-scroll实现轮播图与页面滚动详解

    在我们日常的项目开发中,处理滚动和轮播图是再常见不过的需求了,下面这篇文章主要给大家介绍了关于vue利用better-scroll实现轮播图与页面滚动的相关资料,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-10-10
  • 在vue.js中抽出公共代码的方法示例

    在vue.js中抽出公共代码的方法示例

    这篇文章主要给大家介绍了在vue.js中抽出公共代码的方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Vue自定义指令directive的使用方法分享

    Vue自定义指令directive的使用方法分享

    这篇文章主要为大家详细介绍了Vue中自定义指令directive的使用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • 使用vue-resource进行数据交互的实例

    使用vue-resource进行数据交互的实例

    下面小编就为大家带来一篇使用vue-resource进行数据交互的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Vue Vine实现一个文件中写多个组件的方法(最近很火)

    Vue Vine实现一个文件中写多个组件的方法(最近很火)

    Vue Vine提供了全新Vue组件书写方式,主要的卖点是可以在一个文件里面写多个vue组件,Vue Vine是一个vite插件,vite解析每个模块时都会触发插件的transform钩子函数,本文介绍Vue Vine是如何实现一个文件中写多个组件,感兴趣的朋友一起看看吧
    2024-07-07
  • vue.js打包之后可能会遇到的坑!

    vue.js打包之后可能会遇到的坑!

    这篇文章主要给大家介绍了关于vue.js打包之后可能会遇到的一些坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • Vue3 中 PropType 的使用指南(示例详解)

    Vue3 中 PropType 的使用指南(示例详解)

    Vue3中PropType是TypeScript类型工具,用于定义组件props的类型,基本用法包括简单类型、对象、数组和函数定义,高级用法涉及联合类型、嵌套对象和函数类型,本文介绍Vue3中PropType的使用指南,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Vue中使用防抖与节流的方法

    Vue中使用防抖与节流的方法

    这篇文章主要为大家介绍了Vue中使用防抖与节流的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • rollup3.x+vue2打包组件的实现

    rollup3.x+vue2打包组件的实现

    本文主要介绍了rollup3.x+vue2打包组件的实现,详细的介绍了打包会存在的问题,包版本的问题,babel 转换jsx等问题,具有一定的参考价值,感兴趣的可以了解一下
    2023-03-03

最新评论