首页 > 其他分享 >浅谈 Axios 和 Fetch 的区别

浅谈 Axios 和 Fetch 的区别

时间:2023-03-09 20:11:06浏览次数:43  
标签:axios console 浅谈 fetch Axios Fetch error response log

1.简单区分

 

 

 

2.请求方式

axios传一个对象,里面包含请求url和请求方法,参数。 fetch传两个参数,第一个是请求url,第二个是请求的一些参数。

// axios请求:
const options = {
  url: "http://yuque.com/",
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json;charset=UTF-8",
  },
  data: {
    yuque:'123'
  },
};
 
axios(options).then((response) => {
  console.log(response.status);
});
 
 
// fetch请求示例:
 
const url = "http://yuque.com/";
const options = {
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json;charset=UTF-8",
  },
  body: JSON.stringify({
    yuque:'123'
  }),
};
 
fetch(url, options).then((response) => {
  console.log(response.status);
});

3.同时请求

// axios
axios.all([
    axios.get("http://yuque.com/one"),
    axios.get("http://yuque.com/two"),
  ])
  .then(
    axios.spread((obj1, obj2) => {
      ...
    })
  );

// fetch
Promise.all([
  fetch("http://yuque.com/one"),
  fetch("http://yuque.com/two"),
])
  .then(async ([res1, res2]) => {
    const a = await res1.json();
    const b = await res2.json();
  })
  .catch((error) => {
    console.log(error);
  });

4.请求的数据

在 axios 中,它是自动完成的,所以只需在请求中传递数据或从响应中获取数据。它是自动字符串化的,所以不需要其他操作。 在使用 fetch的时候,需要对响应数据使用某种方法,在发送带有请求的body时,需要对数据进行字符串化。 如下示例axios 没有额外的一行代码,在 fetch中,必须将数据转换为JSON格式。在一个较大的项目中,如果创建了大量的调用,那么可以使用 axios 来避免重复代码。
// axios
axios.get('url')
  .then((response) => console.log(response))
  .catch((error) => console.log(error))
// fetch
fetch('url')
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.log(error))

5.响应的使用

// axios
axios({
    url: 'http://yuque.com/',
    methods: 'POST',
    timeout: 4000, 
    headers: {
        Accept: "application/json",
        'Content-Type': 'application/json;charset=UTF-8',
    },
    data: {
        yuque:'123'
    }
})
.then((response) => {
    /* 处理响应 */
})
.catch((error) => console.log('请求超时'));

// fetch提供的属性AbortController
const controller = new AbortController();
const options = {
    method: 'POST',
    signal: controller.signal,
    body: JSON.stringfy({
        yuque:'123'
    }),
};
const promise = fetch('http://yuque.com/',options);
const timeout = setTimeout(() => controller.abort(),4000);
promise
.then((response) => {
    /* 处理响应*/
})
.catch((error) => console.log('请求超时'));

6.拦截的使用

// axios
axios.interceptors.request.use((config) => {
    // 在请求之前对请求参数进行处理
    return config;
});
axios.get("http://yuque.com/")
.then((response) => {
console.log(response.data);
});

// fetch
fetch = ((originalFetch) => {
  return (...arguments) => {
    const result = originalFetch.apply(this, arguments);
    return result.then(console.log("请求已发送"));
  };
})(fetch);
fetch("http:http://yuque.com/")
  .then((response) => response.json())
  .then((data) => {
    console.log(data);
  });

7.错误的处理

axios处理错误是非常容易的。如果出现像404这样的错误响应,promise就会被拒绝并返回一个错误,所以需要捕获一个错误,可以检查它是什么类型的错误。当响应良好时,接口返回了数据,但是如果请求以任何方式失败,使用axios就能够检查 .catch() 部分中的错误类型并返回正确的消息。 使用fetch,相对来说就较复杂了。每次从 fetch中得到响应时,需要检查状态是否成功,因为即使不是,也会得到响应。在 fetch的情况下,只有当请求没有完成时,promise才会被解决。
// axios
axios.get('url')
  .then((response) => console.log(response))
  .catch((error) => {
    if (error.response) {
      console.log(error.response.data)
      console.log(error.response.status)
      console.log(error.response.headers)
    } else if (error.request) {
      console.log(error.request)
    } else {
      console.log(error.message)
    }
  })
// fetch
fetch('url')
  .then((response) => {
    if (!response.ok) {
      throw Error(response.statusText);
    }
    return response.json()
  })
  .then((data) => console.log(data))
  .catch((error) => console.log(error))

总结:

通过比较可以看出,对于较大型项目有大量http请求,需要良好的错误处理或http拦截的应用,Axios是一个更好的解决方案。在小型项目的情况下,只需要少量API调用,Fetch也是一个不错的解决方案。大多数浏览器和Node.js环境都支持Axios,而现在浏览器仅支持Fetch,所以使用H5或PC的项目使用Axios相对较好,使用App内嵌H5项目,依赖App壳子中的浏览器,尽量减少Fetch的使用,以达到最好的兼容性。  

 

  

 

标签:axios,console,浅谈,fetch,Axios,Fetch,error,response,log
From: https://www.cnblogs.com/friend/p/17201246.html

相关文章

  • 亚马逊RedShift调研-浅谈技术框架、优缺点及网上风评
    RedShift是亚马逊开发的一个站式云上数据仓库服务。网上案例与风评较少,做的一些个人总结。1.RedShift优势及特色1.1官方介绍①借助AmazonRedshift的数据仓库......
  • 机器人运动|浅谈Time Elastic Band算法
    前言在自主移动机器人路径规划的学习与开发过程中,我接触到TimeElasticBand算法,并将该算法应用于实际机器人,用于机器人的局部路径规划。在此期间,我也阅读了部分论文、官方......
  • vue生命周期以及如何将axios挂载到vue的原型链上
    生命周期组件的生命周期是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行 ......
  • 浅谈基于Web的跨平台桌面应用开发
    作者:京东物流王泽知近些年来,跨平台跨端一直是比较热门的话题,Writeonce,runanywhere,一直是我们开发者所期望的,跨平台方案的优势十分明显,对于开发者而言,可以做到一次开发,......
  • 无锡哲讯浅谈半导体测试企业测试硬件TCC系统
    半导体产品,又被称为集成电路或者IC,英文名是SemiconductorDevice。在半导体测试中常用DUT(DeviceUnderTest)来表示需要检测的IC单元。半导体测试的主要目的,是利用测试设......
  • 【黄啊码】浅谈PHP入门|如何学习PHP
    大家好,我是黄啊码,很多小白问我,怎么入门PHP,甚至连PHP能干嘛都不知道,今天啊码就具体来讲讲。什么是PHPPHP是一种开源的通用脚本语言,用于创建动态网页和应用程序。它可以运行在......
  • 浅谈基于Web的跨平台桌面应用开发
    作者:京东物流王泽知近些年来,跨平台跨端一直是比较热门的话题,Writeonce,runanywhere,一直是我们开发者所期望的,跨平台方案的优势十分明显,对于开发者而言,可以做到一次开......
  • 浅谈C++的boolean类型
    在C++语言中,boolean类型有所不同:数字0与false等价,而非0数字与true等价.对于有过其它编程语言的人来讲,可能需要一个适应的过程。#include<iostream>intmain(){ in......
  • axios如何在往后端发送数据后,立即更新列表
    在使用axios往后端发送数据后,如果需要立即更新列表,可以使用以下方法:1.在发送数据成功后手动更新列表在发送数据成功后,手动触发列表的更新。例如,在Vue组件中,可以在发......
  • Vue+axios 解决跨域
    Vue+axios如何解决跨域问题?跨域问题是由于浏览器的同源策略限制导致的,同源策略是浏览器的一种安全策略,目的是保障用户的信息安全,防止恶意网站窃取数据。同源策略的限制......