在vue中axios设置timeout超时的操作


Posted in Javascript onSeptember 04, 2020

在做vue项目的时候,由于数据量查询比较大,所以前台调用接口数据的时候,往往要等很久,所以需要设置个超时,当超过设置时间就让向页面返回一个状态,让使用者不用一直等。

通过官网api查询,对其超时讲解不是很多,但其和Jquery中请求非常类似

Jquery请求方式

$.ajax({
 url: '接口地址',
 type:'get', //请求方式get或post
 data:{}, //请求所传的参数
 dataType: 'json', //返回的数据格式
 timeout: 4000, //设置时间超时,单位毫秒
 success: function(result) {
 console.log('OK')
 },
 error: console.log('error')
 })

vue中请求方式:

axios.post( //请求方式
url, //接口地址
params, //传递参数
{timeout: 1000 * 60 * 2}) //设置超时,单位毫秒
.then(function(res){
 console.log(res);
}).catch((error) => {
 console.log('error')
})

所以可以再请求中通过timeout设置请求超时

补充知识:vue中用axios请求接口,处理网络失败和网络超时问题,axios拦截器

前端经常要对服务器的错误信息做处理,小编是头一次做,就遇到了很多问题

首先,是封装的请求数据的方法

import Vue from 'vue';
import axios from 'axios';
import qs from 'qs';
import wx from 'weixin-js-sdk';
import {
 Toast
} from 'mint-ui';

axios.defaults.timeout = 10000;
// 拦截
axios.interceptors.request.use(function (config) {
 return config
}, function (error) {
 return Promise.reject(error);
})
axios.interceptors.response.use(
 response => {
 if (typeof(response) != 'String'&&response.data.errno !== 0 && response.config.url.indexOf('searchorderoyidornumber') < 0 && response.config.url.indexOf('upload') < 0) {
  response.data['data'] = response.data['data'] || {};
  Toast(response.data.errmsg)
 }
 if (typeof(response) != 'String'&&response.data.errno == 3521) {
  localStorage.clear();
  location.href = '#/login'
 }
 return response.status == 200 ? response.data : response;
 // return response
 },
 error => {
 //String(error).toLowerCase().indexOf('timeout')
 if (error && error.stack.indexOf('timeout') > -1) {
  Toast('请求超时')
 }
 // let config = error.config;
 // if (!config || !config.retry) return Promise.reject(err);
 // config.__retryCount = config.__retryCount || 0;

 // // Check if we've maxed out the total number of retries
 // if (config.__retryCount >= config.retry) {
 // // Reject with the error
 // return Promise.reject(err);
 // }

 // // Increase the retry count
 // config.__retryCount += 1;

 // // Create new promise to handle exponential backoff
 // var backoff = new Promise(function (resolve) {
 // setTimeout(function () {
 //  resolve();
 // }, config.retryDelay || 1);
 // });

 // // Return the promise in which recalls axios to retry the request
 // return backoff.then(function () {
 // return axios(config);
 // });
 }
);
let axios_post = function (url, params) {
 return new Promise((resolve, reject) => {
 if (!localStorage.getItem('token') || localStorage.getItem('token') == '') {
  axios.get('/gettoken').then((res) => {
  localStorage.setItem('token', res.data.token)
  axios.post(url, qs.stringify(params),
  {
   headers: {
   'Content-Type': 'application/x-www-form-urlencoded'
   }
  }).then(res => {
   resolve(res)
  }).catch(err => {
   reject(err)
  })
  }).catch(err => {
  reject(err)
  })
 } else {
  params = url.indexOf('login') > -1 ? {
  ...params,
  _token: localStorage.getItem('token')
  } : {
  ...params,
  _token: localStorage.getItem('token'),
  S: localStorage.getItem('S'),
  U: localStorage.getItem('U')
  }
  let options = {};
  options['maxContentLength'] = 1024000000;
  if(url.indexOf('uplpoad') > -1){
  options['timeout'] = 1000 * 30;
  }
  axios.post(url, params, options).then(res => {
  resolve(res)
  }).catch(err => {
  reject(err)
  })
 }
 })
}
let axios_get = function (url, params) {
 let _params = typeof (params) == 'object' ? params : {}
 _params = {
 ..._params,
 S: localStorage.getItem('S'),
 U: localStorage.getItem('U')
 }
 return new Promise((resolve, reject) => {
 axios.get(url, {
  'params': _params
 }).then(res => {
  if (res.errno !== 0) {
  reject(res)
  }
  resolve(res)
 }).catch(err => {
  reject(err)
 })
 })
}
let getCookie = function(cookieName) {
 var cookieValue = "";
 if (document.cookie && document.cookie != '') {
  var cookies = decodeURIComponent(document.cookie).split(';');
  for (var i = 0; i < cookies.length; i++) {
   var cookie = cookies[i].trim();
   // if (cookie.substring(0, cookieName.length + 1).trim() == cookieName.trim() + "=") {
   //  cookieValue = cookie.substring(cookieName.length + 1, cookie.length);
   //  break;
   // }
   var cookie = cookies[i].trim();
   var cookieArr = cookie.split('=');
   if(cookieArr[0] == cookieName.trim()){
    cookieValue = cookieArr[1];
    break;
   }
  }
 }
 return cookieValue;
}

let setCookie = function(name,value){ 
 var Days = 30; 
 var exp = new Date(); 
 exp.setTime(exp.getTime() + Days*24*60*60*1000); 
 document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); 
} 

Vue.prototype.$http = axios;
Vue.prototype.$get = axios_get;
Vue.prototype.$post = axios_post;
Vue.prototype.$getCookie = getCookie;
Vue.prototype.$setCookie = setCookie;

在组件中直接this.$post()这样用即可。

以上这篇在vue中axios设置timeout超时的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript parseInt与Number函数的区别
Jan 21 Javascript
js单例模式详解实例
Nov 21 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
jQuery实现的简单分页示例
Jun 01 Javascript
微信小程序 五星评分的实现实例
Aug 04 Javascript
JS中图片压缩的方法小结
Nov 14 Javascript
JS实现关键词高亮显示正则匹配
Jun 22 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
layui之table checkbox初始化时选中对应选项的方法
Sep 02 Javascript
layui清除radio的选中状态实例
Nov 14 Javascript
javascript canvas封装动态时钟
Sep 30 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 #Javascript
JavaScript中的执行环境和作用域链
Sep 04 #Javascript
Vue 禁用浏览器的前进后退操作
Sep 04 #Javascript
详解JavaScript数据类型和判断方法
Sep 04 #Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
Sep 04 #Javascript
详解JavaScript中new操作符的解析和实现
Sep 04 #Javascript
我所理解的JavaScript中的this指向
Sep 04 #Javascript
You might like
crontab无法执行php的解决方法
2016/01/25 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Python入门之后再看点什么好?
2018/03/05 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python 实现UTC时间加减的方法
2018/12/31 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
顶碗少年教学反思
2014/02/21 职场文书
软件项目开发计划书
2014/05/01 职场文书
会议室标语
2014/06/21 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers