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

手表网站制作照片百度怎么做推广

手表网站制作照片,百度怎么做推广,怎么让搜索引擎收录网站,网站建设注册哪类商标这两个功能都是用拦截器实现。 前景提要: ts 简易封装 axios,统一 API 实现在 config 中配置开关拦截器 全局错误处理 在构造函数中,添加一个响应拦截器即可。在构造函数中注册拦截器的好处是,无论怎么实例化封装类&#xff0c…

在这里插入图片描述

这两个功能都是用拦截器实现。

前景提要:
ts 简易封装 axios,统一 API
实现在 config 中配置开关拦截器

全局错误处理

在构造函数中,添加一个响应拦截器即可。在构造函数中注册拦截器的好处是,无论怎么实例化封装类,这个错误拦截器都会被注册进实例。

其中有个注意点,就是请求取消。取消请求会导致响应 promise 状态为 rejected,这样就会触发响应拦截器的 onRejected 回调。因此要单独处理请求的请求情况,将它与请求错误区分开来。

class HttpRequest {private readonly instance: AxiosInstance;constructor(config: MyAxiosRequestConfig) {this.instance = axios.create(config);// axios http 错误处理(超出 2xx 范围的 http 状态码都会触发该函数)this.instance.interceptors.response.use(null, (error: AxiosError) => {// 手动取消请求会导致“错误”触发if (error.message === "canceled") alert("请求取消成功");const { response } = error;// 1. 请求超时 && 网络错误单独判断,因为没有 responseif (error.message.indexOf("timeout") !== -1) alert("请求超时!请您稍后重试");if (error.message.indexOf("Network Error") !== -1) alert("网络错误!请您稍后重试");// 2. 根据 http 服务器响应的错误状态码,做不同的处理if (response) {switch (response.status) {case 404:alert("你所访问的资源不存在!");break;case 500:alert("服务异常!");break;default:alert("请求失败!");}}// 3. 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:也可以跳转到断网页面if (!window.navigator.onLine) alert("服务器错误或者无网络"); // router.replace("/500");throw error;});}
}

取消请求

axios 取消请求的方式

axios 取消请求有两种 api。一种是 AbortController,一种是古老的 CancelToken ,已经被弃用了。

AbortController - Web API 接口参考 | MDN

我们主要使用第一种方式:

  1. 实例化取消控制器接口,控制器对象有一个信号标记signal
  2. 将该标记配置给 axios 同名的 signal配置
  3. 控制器对象调用abort()方法就能取消被标记了的请求。
const controller = new AbortController();axios.get('/foo/bar', {signal: controller.signal
}).then(function(response) {//...
});
// 取消请求
controller.abort()

封装取消请求功能

取消请求也是个基础功能,因此和全局错误拦截器一样在构造函数中注册拦截器。

取消请求:

  1. 为每一个请求生成一个控制器 controller,并添加 signal
  2. 维护一个 map,以 url 为 key,对应的 controller 为 value
  3. 要取消哪个请求就通过 url,获取它的 controller 来取消
  4. 在全局响应拦截器中,给所有请求添加 signal,并在请求结束后从 map 中剔除该 url 对应的 controller

封装类暴露两个方法:

  1. 取消全部请求
  2. 根据 url 取消请求
class HttpRequest {private readonly instance: AxiosInstance;private readonly abortControllerMap: Map<string, AbortController>;constructor(config: MyAxiosRequestConfig) {this.instance = axios.create(config);// 为每个请求都生成一个 signal,并以 url 为 key 添加入 mapthis.instance.interceptors.request.use(config => {// 如果具体方法中设置了 signal,这里就不再添加,避免覆盖。if (config.signal) return config;const controller = new AbortController();config.signal = controller.signal;const url = config.url || "";this.abortControllerMap.set(url, controller);return config;},(err: AxiosError) => {throw err;});// 响应完,从map中去除 urlthis.instance.interceptors.response.use(res => {const url = res?.config.url || "";this.abortControllerMap.delete(url);return res;},(err: AxiosError) => {const url = err?.config?.url || "";this.abortControllerMap.delete(url);throw err;});}/*** 取消全部请求*/cancelAllRequest() {for (const [, controller] of this.abortControllerMap) {controller.abort();}this.abortControllerMap.clear();}/*** 取消指定的请求* (并发上传文件的url通常是一样的,通过url取消请求会取消所有上传操作,故此方法不宜用来取消上传请求)* @param url 待取消的请求URL*/cancelRequest(url: string | string[]) {const urlList = Array.isArray(url) ? url : [url];urlList.forEach(_url => {this.abortControllerMap.get(_url)?.abort();this.abortControllerMap.delete(_url);});}
}
http://www.ds6.com.cn/news/105013.html

相关文章:

  • wordpress设置收费查看seo的优化方案
  • 成都本地做网站的做优化关键词
  • 普洱网站建设优化北京网站推广服务
  • 搭建本地网站快速提高关键词排名的软件
  • 制作网站技术腾讯企点app下载安装
  • wordpress add media搜索引擎优化的具体措施
  • 工业设计好就业吗seo变现培训
  • 江门论坛网站建设吉林seo关键词
  • 西宁 专业网站建设seo优化技术培训中心
  • 关于企业网站建设的建议搜索优化整站优化
  • 网站可以做什么深圳网络提速优化服务包
  • 百度和阿里哪个厉害做网站西安网站建设推广
  • 手机网站搭建平台搜索引擎推广
  • 江津区做网站什么软件可以推广
  • 网站备案 假身份证常德网站优化公司
  • 青岛网站建设unitewww推广网站
  • 建设网站的目的是什么如何注册一个自己的网站
  • 防止入侵网站百度搜索电话
  • 南昌公司做网站上海百度推广公司排名
  • 网站转跳怎么做深圳推广公司有哪些
  • 一般人公司注册费用沧州seo公司
  • 网站的开发流程深圳网络推广网站
  • 做电商一件代发的网站推广运营怎么做
  • 全国新冠疫苗接种人数最新消息四川网络推广seo
  • 昆山网站建设详细方案甘肃网站推广
  • 网站建设后台cms管理系统方案参考网是合法网站吗?
  • 视频类html网站模板软件拉新推广平台
  • 如何维护网站百度云搜索引擎网站
  • 邯郸网站设计制作连接交换
  • 南通医院网站建设方案去除痘痘怎么有效果