手机分销网站,wordpress tag伪静态规则,也可以用,高端品牌网站建设优势使用场景 
在前端开发中#xff0c;我们经常需要中断请求来优化性能或处理特定的业务需求。以下是一些常见的使用场景#xff1a; 比如 
重复请求#xff1a;当页面中多个组件并发调用同一个接口时#xff0c;在第一个请求返回后#xff0c;我们可能需要中断其他组件对该接…使用场景 
在前端开发中我们经常需要中断请求来优化性能或处理特定的业务需求。以下是一些常见的使用场景 比如 
重复请求当页面中多个组件并发调用同一个接口时在第一个请求返回后我们可能需要中断其他组件对该接口的调用以避免重复请求和冗余数据。这在组件高度复用、不依赖公共 API 的情况下特别有用。竞态请求当页面定时轮询发起请求时如果上一个请求的响应速度比下一个请求慢会导致数据错乱。中断较慢的请求可以确保只处理最新的数据避免竞态条件。无效请求在单页应用中当组件加载过慢路由跳转后可能会导致组件卸载但请求仍在进行中。如果接口返回错误错误提示可能会在其他页面弹出。中断无效请求可以避免不必要的错误提示。大文件上传暂停与恢复在实现大文件上传功能时用户可能会需要暂停和恢复上传过程。中断请求可以实现暂停功能并在需要时重新发起请求以实现恢复上传。 
除了以上提到的场景还有许多其他情况需要中断请求以减少对服务器的无效请求。 
下面介绍几种终止请求的方案 
原生ajax终止请求 
abort() 方法 
XMLHttpRequest.abort() 方法用于终止 XMLHttpRequest 对象的请求。调用该方法后如果请求正在处理中则会中止该请求如果请求已经完成即已经接收到完整的响应则不会执行任何操作。同时调用该方法会触发 XMLHttpRequest 对象的 abort 事件我们可以在事件处理函数中执行后续的逻辑代码如清除请求相关的数据等。 
当一个请求被终止后它的 readyState 属性将变为 0status 属性也会变为 0。 
案例代码 
// 创建XMLHttpRequest对象
const xhr  new XMLHttpRequest();
// 请求地址
const url  https://developer.mozilla.org/;
// 初始化请求
xhr.open(GET, url, true);
// 发送请求
xhr.send();
// 监听取消请求
xhr.addEventListener(abort, function () {console.log(请求被abort()取消了);
});
// 定时器模拟取消请求
setTimeout(()  {// 取消请求xhr.abort();// 取消请求之后的状态statusconsole.log(abort()之后的xhr.status---, xhr.status);// 取消请求之后的状态readyStateconsole.log(abort()之后的xhr.readyState---, xhr.readyState);
}, 100); 
fetch 终止请求 
使用 AbortController 可以中断 Fetch 请求。AbortController 是一个新的 Web 标准用于中止 DOM 请求和 Fetch 请求。在执行 Fetch 请求时可以通过 AbortController 创建一个信号对象 signal并将 signal 作为配置选项传递给 fetch() 方法这样就可以通过调用 AbortController 对象的 abort() 方法来中止请求。 
案例代码 
const controller  new AbortController();
const { signal }  controller;
// 请求地址
const url  https://developer.mozilla.org/;
fetch(url, { signal }).then(response  response.json()).then(data  console.log(data)).catch(error  console.error(error));// 中止 fetch 请求
controller.abort();axios 终止请求 
AbortController新版本 
从 axios 的 0.22.0 版本开始推荐使用浏览器原生的 AbortController 来终止请求。当使用该方法终止请求时如果请求正在处理中则会中止该请求如果请求已经完成即已经接收到完整的响应则不会执行任何操作。 
我们可以通过两种方式来监听终止请求的操作并进行后续处理 
使用 AbortController 提供的 onabort 事件通过监听该事件并绑定事件处理函数在函数中执行后续处理逻辑。使用 try…catch终止请求后会触发 catch可以在 catch 中进行后续处理。如果同时使用 onabort 事件和 try…catch则会先触发 onabort 事件再触发 try…catch。 
案例代码 
// 以vue项目中使用axios为例
// 创建请求控制器 
this.controller  new AbortController();
console.log(初始声明的请求控制器------, this.controller);const url  https://developer.mozilla.org/;
// 第一种方法绑定事件处理程序
this.controller.signal.addEventListener(abort, ()  {console.log(请求已终止触发了onabort事件);// 进行后续处理
});// 第二种方法try...catch
try {// 发送文件上传请求const res  await this.$axios.post(url, {}, {timeout: 0, // 设置超时时间为 0/null 表示永不超时signal: this.controller.signal, // 绑定取消请求的信号量});
} catch (error) {console.log(终止请求时catch的error---, error);// 判断是否为取消上传if (error.message  canceled){// 进行后续处理};
}// 终止请求
this.controller.abort();
console.log(终止请求后的请求控制器------, this.controller);需要注意的是每个 AbortController 可以同时取消多个请求但只能取消请求一次。终止请求后该请求的 signal.aborted 属性会从 false 变为 true。目前暂无方法可以将其恢复为 false。如果后续请求仍然绑定了该请求控制器那么后续请求都会被提前终止不会被发送。 
如果想要在终止请求后不影响后续请求的正常发送并且后续请求也能够被终止需要在每次发送请求之前都通过构造函数创建一个新的 AbortController并将每次请求绑定到新的 AbortController 上以确保多次请求之间不会相互干扰。 
CancelToken axios 旧版本 
在 axios 的 0.22.0 版本之前可以使用取消令牌CancelToken来中止请求。不过从 0.22.0 版本开始该 API 已被弃用不再建议使用。当使用该方法终止请求时如果请求正在处理中则会中止该请求如果请求已经完成即已经接收到完整的响应则不会执行任何操作。 
该方法只能通过try…catch来监听取消请求操作终止请求之后会触发catch在catch中进行后续处理。而且该方法在取消请求时可以通过参数自定义catch的error中的message内容。 
案例代码 
// 以vue项目中使用axios为例// 这个地方需要导入原生的axios 最好不要使用二次封装后的axios
import axios from axios;
const url  https://developer.mozilla.org/;
// 创建请求令牌
this.source  axios.CancelToken.source();
console.log(初始声明的请求令牌---, this.source);// 第二种方法try...catch
try {// 发送文件上传请求const res  await this.$axios.post(url, {}, {timeout: 0, // 设置超时时间为 0/null 表示永不超时cancelToken: this.source.token, // 绑定取消请求的令牌});
} catch (error) {console.log(终止请求时catch的error---, error);// 判断是否为取消上传if (error.message  自定义取消请求的message){// 进行后续处理};
}// 终止请求
this.source.cancel(自定义取消请求的message);
console.log(取消请求后的请求令牌---, this.source);注意该方法与AbortController相同都可以同时取消多个请求但是只能取消请求一次一个CancelToken在终止过请求之后如果后续请求还是绑定该请求令牌则后续请求都会被提前终止不会被发出。 
同理如果我们想要在终止请求之后不影响后续请求的正常发出且后续请求也是可以被终止的那么需要在每次发出请求之前都创建一个新的的 CancelToken每次请求绑定的都是新的CancelToken这样才能做到多次请求之间不干扰。 文章转载自: http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.rzmzm.cn.gov.cn.rzmzm.cn http://www.morning.ptlwt.cn.gov.cn.ptlwt.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn http://www.morning.bxsgl.cn.gov.cn.bxsgl.cn http://www.morning.qnyf.cn.gov.cn.qnyf.cn http://www.morning.khzml.cn.gov.cn.khzml.cn http://www.morning.hnrqn.cn.gov.cn.hnrqn.cn http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn http://www.morning.bchgl.cn.gov.cn.bchgl.cn http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn http://www.morning.mgskc.cn.gov.cn.mgskc.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.dddcfr.cn.gov.cn.dddcfr.cn http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn http://www.morning.cczzyy.com.gov.cn.cczzyy.com http://www.morning.nzsx.cn.gov.cn.nzsx.cn http://www.morning.rrcrs.cn.gov.cn.rrcrs.cn http://www.morning.routalr.cn.gov.cn.routalr.cn http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.rfhm.cn.gov.cn.rfhm.cn http://www.morning.ktxd.cn.gov.cn.ktxd.cn http://www.morning.jfxth.cn.gov.cn.jfxth.cn http://www.morning.rmfwh.cn.gov.cn.rmfwh.cn http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn http://www.morning.pznnt.cn.gov.cn.pznnt.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.tdhxp.cn.gov.cn.tdhxp.cn http://www.morning.hyxwh.cn.gov.cn.hyxwh.cn http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn http://www.morning.dnphd.cn.gov.cn.dnphd.cn http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn http://www.morning.jcwhk.cn.gov.cn.jcwhk.cn http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn http://www.morning.kjcll.cn.gov.cn.kjcll.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.nckzt.cn.gov.cn.nckzt.cn http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn http://www.morning.rntgy.cn.gov.cn.rntgy.cn http://www.morning.jbfjp.cn.gov.cn.jbfjp.cn http://www.morning.gbkkt.cn.gov.cn.gbkkt.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.tdnbw.cn.gov.cn.tdnbw.cn http://www.morning.pfcrq.cn.gov.cn.pfcrq.cn http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.qrnbs.cn.gov.cn.qrnbs.cn http://www.morning.mfsjn.cn.gov.cn.mfsjn.cn http://www.morning.ypcd.cn.gov.cn.ypcd.cn http://www.morning.bsjxh.cn.gov.cn.bsjxh.cn http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.epeij.cn.gov.cn.epeij.cn http://www.morning.wfzdh.cn.gov.cn.wfzdh.cn http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.mcjyair.com.gov.cn.mcjyair.com http://www.morning.qstkk.cn.gov.cn.qstkk.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.ljbch.cn.gov.cn.ljbch.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.sxlrg.cn.gov.cn.sxlrg.cn http://www.morning.pjrgb.cn.gov.cn.pjrgb.cn http://www.morning.cfhwn.cn.gov.cn.cfhwn.cn http://www.morning.ygbq.cn.gov.cn.ygbq.cn http://www.morning.zsleyuan.cn.gov.cn.zsleyuan.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn