赞
踩
在APP日常使用过程中可能遇到token过期或者token失效的情况;平常大家的做法就是给个提示,然后需要再次请求一次接口重新获取token,这样的操作给用户一种极不友好的体验,为了让用户感觉不到重新获取token这个场景,那么就需要在用户不知情的情况下重新获取token且再次重新请求接口使操作流程不中断。
本次给大家介绍在请求接口request内建立重试机制,该机制统一封装在一个request请求中。
- import Url from "../config/urlConfig.js"
- import getToken from "@/common/getToken.js" //封装获取token的方法
-
-
- /**
- * header参数设置
- * @param {Object} header
- */
- function headers(header) {
- let headers = {};
- let Token = uni.getStorageSync("token")
- if (Token.length!==0) { //有token的情况下设置token
- let token = {"token":Token};
- headers = Object.assign(token,header);
- }else {
- headers = header;
- }
- return headers;
- }
-
-
- /**
- * 请求封装
- * @param {Object} url
- * @param {Object} method
- * @param {Object} data
- * @param {Object} headers
- * @param {Object} resType
- */
- function request(url,method,data,header,resType) {
- return new Promise((resolve,reject)=>{
- uni.request({
- url: Url() + url,
- method: method || 'GET',
- data: data || {},
- header: header || {},
- responseType: resType,
- success: (res)=>{
- if(res.data.code===401) { //请求接口返回401(token异常)后直接返回401
- resolve(401)
- }else {
- resolve(res); //没有401时返回响应数据
- }
- },
- fail: (err)=>{
- reject(err);
- }
- })
- })
- }
-
- /**
- * export请求;请求重试机制
- * @param {Object} url
- * @param {Object} method
- * @param {Object} data
- * @param {Object} headers
- * @param {Object} resType
- */
- export default (url,method,data,header,resType)=>{
- return new Promise((resolve,reject)=>{
- request(url,method,data,headers(header),resType).then(res=>{
- if(res===401) { //接口请求401,401是request请求手动抛出的401
- getToken().then(res=>{ //接口重试,在获取到token以后对请求失败的接口再次请求;这儿可以根据自己的需要自己定义
- request(url,method,data,headers(header),resType).then(res=>{
- resolve(res)
- })
- })
- }else { //没有token异常时直接返回响应数据
- resolve(res)
- }
- }).catch(err=>{reject(err)})
- })
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。