• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 一文讲解Vue中路由切换终止异步请求(附代码)

一文讲解Vue中路由切换终止异步请求(附代码)

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Vue路由,切换终止异步请求等相关知识,希望对您有所帮助

本篇文章给大家了解Vue中路由切换终止异步请求,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。

一文讲解Vue中路由切换终止异步请求(附代码)


问题:

在SPA模式开发当中,比如VUE,当前路由切换的时候如何终止正在发生的异步请求呢。

结果:

假如请求超时并且有设定超时时间。有一堆的异步请求在执行,当用户切换到另一个页面,这些请求还未终止,并且当服务器响应之后,反馈的结果不是当前页面所期待的。最终会误导用户造成一些不必要的结果。也给web造成性能问题。

解决方案:

把执行的请求存入队列,当路由切换的时候终止队列里的异步请求。

首先搞一棵树来存储请求队列

import Vue from "vue";import Vuex from "vuex";Vue.use(Vuex);let store = new Vuex.Store({  state: {    requests: [],  },}); new Vue({  el: "#app",  router: router,  render: (h) => h(App),  store,});

利用ajax请求和终止

var xhr = $.ajax({  type: "POST",  url: "xxxsx",  data: "",  success: function () {    alert("ok");  },});//xhr.abort()  终止请求this.$store.state.requests.push(xhr);

利用superagent请求和终止

const request = require('superagent')var xhr = request('post','/api/xxxx/xxxx')xhr.send(data)//xhr.query(data) //get 传参xhr.end((err,res)=>{    ...todo...})//xhr.abort() 终止请求this.$store.state.requests.push(xhr)

利用axios请求

import axios from "axios";var CancelToken = axios.CancelToken;var source = CancelToken.source();axios  .get("/api/xxxxx/xxxxx", {    cancelToken: source.token,  })  .catch(function (thrown) {    if (axios.isCancel(thrown)) {      console.log("Request canceled", thrown.message);    } else {      // 处理错误    }  }); // 取消请求(message 参数是可选的)//source.cancel('Operation canceled by the user.'); this.$store.state.requests.push(source);

利用vue-resource请求

import Vue from "vue";import req from "vue-resource";Vue.use(req); this.$http  .get("/someUrl", {    before(request) {      this.$store.state.requests.push(request);      //request.abort(); 终止请求    },  })  .then(    (response) => {      // success callback    },    (response) => {      // error callback    }  );

利用fetch请求

fetch貌似无法监控读取进度和终端请求,他没有 timeout 机制,没有 progress 提示,但是可以利用 Promise 来实现终止

var _fetch = (function (fetch) {  return function (url, options) {    var abort = null;    var abort_promise = new Promise((resolve, reject) => {      abort = () => {        reject("abort.");        console.info("abort done.");      };    });    var promise = Promise.race([fetch(url, options), abort_promise]);    promise.abort = abort;    return promise;  };})(fetch); var xhr = _fetch("/api/xxx/xxxx", { methods: "POST", body: data });xhr.then(  function (res) {    console.log("response:", res);  },  function (e) {    console.log("error:", e);  });xhr.abort(); //终止 this.$store.state.requests.push(xhr);

那么知道如何终止请求,然后也存储了请求实例,剩下的只要监听路由就行了

let router = new Router({....})//每次路由改变之前终止所有的请求实例router.beforeEach(function (to, from, next) {    this.$store.state.requests.forEach(xhr=>xhr.abort()) //终止所有的请求实例    this.$store.state.requests =[] //执行完清空,等待下一次的页面的请求装载    next()})

这种只是假设,自然请求完成之后最好,还是手动释放树的请求示例。例如ajax请求完成之后在complite里面splice store里面的实例。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一文讲解Vue中路由切换终止异步请求(附代码)
  • VUE动态添加的路由页面刷新时失效的原因及解决方案
  • 浅析Vue中hash路由和history路由的区别
  • vue路由学习之区分$route和$router,看看它们的区别

相关文章

  • 2022-04-29cdr快速制作相片锯齿边框
  • 2022-04-29关键词选择技巧之长尾关键词法
  • 2022-04-29你知道Laravel Collection的实际使用场景什么吗?
  • 2022-04-29Photoshop设计发光生锈的艺术字教程
  • 2022-04-29如何解决vue中layui报错问题
  • 2022-04-29Photoshop制作复古黄金文字效果
  • 2022-04-29分享帝国CMS随机会员头像的方法
  • 2022-04-29DedeCMS输入Tags标签全角逗号自动变半角的方法
  • 2022-04-29Linux环境变量配置的6种方法,建议收藏!
  • 2022-04-29PS制作非常逼真的针织吊牌

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Photoshop使用计算工具调出别致的颜色
    • Linux 定时检测 MySQL 数据库是否宕机并自动重启
    • 免费网站目录提交网址收集
    • Phpcms V9内容编辑器支持JavaScript的设置方法
    • WordPress自动设置标签Tag自动内链无插件实现方法
    • CDR设计制作漂亮婚庆字体
    • 新站如何得到搜索引擎的好感?
    • 一分钟教会你php怎么快速匹配文章中的图片
    • phpcms v9添加热门搜索关键词的方法
    • 详解ThinkPHP6结合GuzzleHTTP发送HTTP请求

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有