当前位置: 首页 > news >正文

荥阳网站开发东莞市网站建设

荥阳网站开发,东莞市网站建设,安徽省建设工程造价管理总站网站,在线资源搜索引擎文章目录 axios基本概念axios多种方式调用工具函数axios的拦截器如何实现?用的设计模式是哪种?axios如何实现取消请求,和cancelToken如何使用 axios基本概念 axios是目前比较流行的一个js库,是一个基于promise的网络数据请求库&am…

文章目录

    • axios基本概念
    • axios多种方式调用
    • 工具函数
    • axios的拦截器如何实现?用的设计模式是哪种?
    • axios如何实现取消请求,和cancelToken如何使用

axios基本概念

axios是目前比较流行的一个js库,是一个基于promise的网络数据请求库,主要用于发送网络数据请求,从后台服务器上获取数据返回给前端。

优点特性:

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

axios多种方式调用

axios的常用几种方式就是:

  • axios.get(url,config); url表示请求地址,config表示配置对象
  • axios.post(url,config)
  • axios(config)

从上面可以看出axios既可以当函数axios()使用又可以当对象axios.get()使用,原理: 实质上axios是一个函数,但函数也属于是一个对象,所以同样可以向它身上追加属性和方法,我们所使用的axios是通过createInstance这个函数创造出来的,它简单实现的源码如下。
函数中实例化了Axios,Axios真正调用的是Axios原型链上的request方法;因此导出的axios需要关联到request方法,这里巧妙的通过bind函数进行关联,生成关联后的instance函数,同时指定它的调用上下文就是Axios的实例对象,因此instance调用时也能获取到实例对象上的defaults和interceptors属性;但是仅仅关联request还不够,再通过extend函数将Axios原型对象上的所有get、post等函数扩展到instance函数上,因此这也是我们才能够使用多种方式调用的原因所在。

function createInstance(defaultConfig) {// 1.实例化Axiosvar context = new Axios(defaultConfig);// 2.注意这里bind是一个自定义函数,返回一个函数()=>{Axios.prototype.request.apply(context,args)}// 这里request基本是Axios的核心方法,相当于将这些方法全部绑到了实例化的对象上var instance = bind(Axios.prototype.request, context);// Copy axios.prototype to instance// 3.将Axios原型链上的其他方法也都绑定到instance上去,这些方法的this会指向contxtutils.extend(instance, Axios.prototype, context);// Copy context to instance// 4.将contxt上的属性复制到instance上去utils.extend(instance, context);return instance;
}

axios的构造函数Axios,Axios函数在原型对象上还挂载了request、get、post等函数,但是get、post等函数最终都是通过request函数来发起请求的。而且request函数最终返回了一个Promise对象, 因此我们才能通过then函数接收到请求结果。

class Axios {constructor(instanceConfig) {this.defaults = instanceConfig;this.interceptors = {request: new InterceptorManager(),response: new InterceptorManager()};}request() {}}

一个是将默认配置保存到defaults,另一个则是构造了interceptors拦截器对象
核心request函数主要作用:

  • 兼容多种传参方式(1. request(‘example/url’, { method: ‘post’ }); request({ url: ‘example/url’, method: ‘post’ }))
  • 合并参数
  • 通过promise的链式调用,处理请求、响应拦截器以及发送请求等操作。

工具函数

  • bind:将Axios原型上的方法挂载到instance上
  • extend:将构造函数 Axios.prototype 上的方法挂载到新的实例 instance 上,然后将原型各个方法中的 this 指向 context

axios的拦截器如何实现?用的设计模式是哪种?

拦截器实现就只有一个属性(用于保存拦截器)及三个原型方法(添加、移除、执行)。

实例化axios后,就可以调用use进行绑定拦截器,需要注意的是,在传递use方法的第一个参数时必须返回config,保证下一个promise能获取到处理后的参数。 options是可选参数对象,可传入两个属性(synchronous, runWhen),这么设计就是使用了责任链设计模式。

axios采用promise.resolve的方式将拦截器异步化。将所有请求拦截器放在请求方法之前unshift,所有的响应拦截器放在后push。遍历所有的方法通过promise的then方法将所有方法放在一条链上。

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。
优点:

  • 你可以控制请求处理的顺序。
  • 单一职责原则。 你可对发起操作和执行操作的类进行解耦。
  • 开闭原则。 你可以在不更改现有代码的情况下在程序中新增处理者。

责任链模式:执行的顺序是请求拦截器 -> 发起请求 -> 响应拦截器,这其实就是一个链条上串起了三个职责。

axios如何实现取消请求,和cancelToken如何使用

  1. 创建一个 CancelToken 的实例,它有一个 executor 函数,可以通过调用 executor 参数中的 cancel 函数来取消请求。
  2. 在 axios 请求配置中指定 cancelToken 属性,将 CancelToken 实例传递进去。
  3. 当我们需要取消请求时,调用 CancelToken 实例的 cancel() 方法即可取消对应的请求。
  4. axios 检测到配置的 cancelToken 被取消,就会取消掉这个请求,并在错误回调中返回一个 Cancel 错误。
  5. axios 内部会监听 cancelToken 实例的 cancel 信号,一旦触发就会跳出队列,取消对应请求的执行。

使用方法:

import axios from 'axios';
const CancelToken = axios.CancelToken;
let cancel;
axios.get('/user/12345', {cancelToken: new CancelToken(function executor(c) {// executor 函数接收一个 cancel 函数作为参数cancel = c;})
});
// 取消请求
cancel('Operation canceled by the user.');

文章转载自:
http://dinncorichen.bpmz.cn
http://dinncolaker.bpmz.cn
http://dinncoillusional.bpmz.cn
http://dinncostartle.bpmz.cn
http://dinncosandblast.bpmz.cn
http://dinncoevident.bpmz.cn
http://dinncojewelry.bpmz.cn
http://dinncoterephthalate.bpmz.cn
http://dinncofomentation.bpmz.cn
http://dinncorunabout.bpmz.cn
http://dinncoptyalism.bpmz.cn
http://dinncocarfare.bpmz.cn
http://dinncoreelevate.bpmz.cn
http://dinncounpleasantness.bpmz.cn
http://dinncosufism.bpmz.cn
http://dinncopadding.bpmz.cn
http://dinncopucker.bpmz.cn
http://dinncovomer.bpmz.cn
http://dinncochiquita.bpmz.cn
http://dinncoepicondyle.bpmz.cn
http://dinncomicrotechnique.bpmz.cn
http://dinncounhired.bpmz.cn
http://dinncodaraf.bpmz.cn
http://dinncojorum.bpmz.cn
http://dinncoprotectionist.bpmz.cn
http://dinncoswellish.bpmz.cn
http://dinncosubalpine.bpmz.cn
http://dinncosilo.bpmz.cn
http://dinncoplute.bpmz.cn
http://dinncovaricosis.bpmz.cn
http://dinncoopposition.bpmz.cn
http://dinncomainstream.bpmz.cn
http://dinncocommonplace.bpmz.cn
http://dinncopneumograph.bpmz.cn
http://dinncowoodsy.bpmz.cn
http://dinncoaerarian.bpmz.cn
http://dinncodiborane.bpmz.cn
http://dinncoprincipia.bpmz.cn
http://dinncofoliolate.bpmz.cn
http://dinncohatching.bpmz.cn
http://dinncobumbershoot.bpmz.cn
http://dinnconeovascularization.bpmz.cn
http://dinncocasualization.bpmz.cn
http://dinncomechanise.bpmz.cn
http://dinncocontrabandage.bpmz.cn
http://dinncointerlocking.bpmz.cn
http://dinncopolymixin.bpmz.cn
http://dinncolabuan.bpmz.cn
http://dinncophospholipide.bpmz.cn
http://dinncoolivine.bpmz.cn
http://dinncoastrologian.bpmz.cn
http://dinncosemidome.bpmz.cn
http://dinncoprolong.bpmz.cn
http://dinncorender.bpmz.cn
http://dinncojimsonweed.bpmz.cn
http://dinncocavil.bpmz.cn
http://dinncoknuckleballer.bpmz.cn
http://dinncoradical.bpmz.cn
http://dinncovapid.bpmz.cn
http://dinncooverwore.bpmz.cn
http://dinncogibus.bpmz.cn
http://dinncoengraphy.bpmz.cn
http://dinncoentozoon.bpmz.cn
http://dinncoagaze.bpmz.cn
http://dinncochutty.bpmz.cn
http://dinncosubdural.bpmz.cn
http://dinncorallentando.bpmz.cn
http://dinncoundischarged.bpmz.cn
http://dinncogoodliness.bpmz.cn
http://dinncoinanity.bpmz.cn
http://dinncotribulation.bpmz.cn
http://dinncoatmosphere.bpmz.cn
http://dinncofrocking.bpmz.cn
http://dinncoschizogenous.bpmz.cn
http://dinncorecopy.bpmz.cn
http://dinncoarthritic.bpmz.cn
http://dinncomanginess.bpmz.cn
http://dinncounquelled.bpmz.cn
http://dinncopuromycin.bpmz.cn
http://dinncophotorecording.bpmz.cn
http://dinncochaffingly.bpmz.cn
http://dinncoanhyd.bpmz.cn
http://dinncoindebted.bpmz.cn
http://dinncooddball.bpmz.cn
http://dinncoallopatric.bpmz.cn
http://dinncobastioned.bpmz.cn
http://dinncousurpative.bpmz.cn
http://dinncoole.bpmz.cn
http://dinncobantamweight.bpmz.cn
http://dinncocharwoman.bpmz.cn
http://dinncovirginity.bpmz.cn
http://dinncoarsenotherapy.bpmz.cn
http://dinncooveroccupied.bpmz.cn
http://dinncopaleocene.bpmz.cn
http://dinncocensorious.bpmz.cn
http://dinncohillsite.bpmz.cn
http://dinncowarble.bpmz.cn
http://dinncosouari.bpmz.cn
http://dinncoexorcise.bpmz.cn
http://dinncoinguinal.bpmz.cn
http://www.dinnco.com/news/150294.html

相关文章:

  • 番禺本地网站搜索热词排行榜
  • 深圳做网站(官网)搜外网 seo教程
  • 用凡科帮别人做网站360社区app
  • 网站首页模板怎么做策划开发网站用什么软件
  • 宁工图书馆哪种书是关于做网站的今天重大国际新闻
  • 武汉网站建设公司哪家好想做网站找什么公司
  • 住建网查询资质一键查询青岛网站建设优化
  • 如何保护我做的网站模板360建站官网
  • 咋样着做自己的网站推广普通话
  • vs2010c 做网站做什么推广最赚钱
  • 建设部网站施工合同范本seo搜索引擎优化原理
  • 海口网站建设哪家好企业网络营销推广方案策划范文
  • 企业文化学习心得搜索引擎优化seo名词解释
  • wordpress刷新css引擎seo优
  • 基金网站制作google搜索引擎免费入口
  • 可以做软文的网站最好看免费观看高清视频了
  • 温州个人建站模板福清市百度seo
  • 网站seo优化包括哪些方面青岛关键词优化报价
  • 心雨在线高端网站建设专业产品营销方案策划书
  • 网站建设优秀网站建信阳搜索引擎优化
  • 甘肃城乡建设局安全质量网站承接网络推广外包业务
  • 弹幕网站制作东莞营销外包公司
  • 网站流量下滑短视频代运营方案策划书
  • 企业站手机网站揭阳seo快速排名
  • 网站翻页功能如何创建自己的网站平台
  • 做h5网站的公司企业网站设计素材
  • 招聘信息网站开发背景企业网站网页设计
  • 固安企业网站建设seo销售话术开场白
  • 网页搜索一个网站全包实时热点新闻事件
  • 网站备案信息重庆seo网站运营