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

含羞草m码和欧洲码的区别是什么正规优化公司哪家好

含羞草m码和欧洲码的区别是什么,正规优化公司哪家好,高端网站建设的品牌,网络平台怎么推广路漫漫其修远兮,前端道路逐渐迷茫,时隔好久好久终于想起了我还有一个小博客,最近在一直在弄uniapp,属实有被恶心到,但也至少会用了,最近实现了一个比较通用的功能,就是无感刷新token&#xff0c…

路漫漫其修远兮,前端道路逐渐迷茫,时隔好久好久终于想起了我还有一个小博客,最近在一直在弄uniapp,属实有被恶心到,但也至少会用了,最近实现了一个比较通用的功能,就是无感刷新token,但在过程中发现一个问题就是token刷新了,接口也重新请求了,但页面数据就是没有刷新

上面问题归根结底还是自己对于promise、async、await等知识理解不够深刻导致的,先看看无感刷新token怎么实现的吧!废话不多说上代码(代码都有注释):

import Request from './request' // 对uniapp.request的简易封装
import { getRefreshToken } from '@/common/api/apis.js' // 刷新token接口
const http = new Request()let isRefresh = false // 是否处于刷新token状态中
let fetchApis = [] // 失效后同时发送请求的容器
let refreshCount = 0 // 限制无感刷新的最大次数
function onFetch(newToken) {refreshCount += 1if (refreshCount === 3) {refreshCount = 0fetchApis = []return Promise.reject()}fetchApis.forEach(callback => {callback(newToken)})// 清空缓存接口fetchApis = []return Promise.resolve()
}// 响应拦截(主要看error,因为token过期一般你们后端接口都是返回401/402,在对应case下处理刷新token逻辑即可)
http.interceptor.response((response) => {/* 请求之后拦截器 */if (response.config.loading) {uni.hideLoading()}// 请求成功但接口返回的错误处理if (response.data.statusCode && +response.data.statusCode !== 200) {if (!response.config.needPromise) {console.log('error', response)uni.showModal({title: '提示',content: response.data.message,showCancel: false,confirmText: '知道了'})// 中断return new Promise(() => {})} else {// reject Promisereturn Promise.reject(response.data)}}return response
}, (error) => {// 请求错误做点什么const token = uni.getStorageSync('token')const refreshToken = uni.getStorageSync('refreshToken')// DESC: 不需要做无感刷新的白名单接口const whiteFetchApi = ['/dealersystem/jwtLogin', '/dealersystem/smsLogin', '/sso2/login', '/dealersystem/isLogin']switch (error.statusCode) {// token过期处理,实现无感刷新case 401:case 402:// 如果登录过,token过期走refreshToken逻辑if (token && !whiteFetchApi.includes(error.config.url)) {if (!isRefreshing) {isRefreshing = truegetRefreshToken({ refreshToken }).then(res => {let newToken = res.dataonTokenFetched(newToken).then(res => {}).catch(err => {// 超过循环次数时,回到登录页,这里可以添加你执行退出登录的逻辑uni.showToast({ title: '登录失效,请重新登录', icon: 'error' })setTimeout(() => {uni.reLaunch({url: '/pages/login/login'})}, 1500)})}).catch(err => {// refreshToken接口报错,证明refreshToken也过期了,那没办法啦重新登录呗uni.showToast({ title: '登录失效,请重新登录', icon: 'error' })setTimeout(() => {uni.reLaunch({ url: '/pages/login/login' })}, 1500)}).finally(() => { isRefreshing = false })}return new Promise((resolve) => { // 此处的promise很关键,就是确保你的接口返回值在此处resolve,以便addFetchApi((newToken) => {error.config.header.token = newTokenresolve(http.request(error.config))})})} else {// 没有登录过,直接输入链接访问的情况if (whiteFetchApi.includes(error.config.url)) {return Promise.reject(error.data)}uni.showToast({ title: '您未登录,请前往登录', icon: 'error' })setTimeout(() => {uni.reLaunch({ url: '/pages/login/login' })}, 1500)return Promise.reject(error.data)}default:errorMsg = error.data.message || ''break}uni.showModal({title: '提示',content: errorMsg,showCancel: false,confirmText: '知道了'})return Promise.reject(error.data)})

业务侧列表页请求接口:(我的问题就在于调用接口后,下方的代码不执行,导致页面数据不更新
也就是说该语句没有resolve回结果在这里插入图片描述
在这里插入图片描述

那么,怎么排查问题呢,首先先复现问题:
1、token我在localStorage缓存了一份,可以在谷歌浏览器中更改token,模拟token过期
在这里插入图片描述
2、触发如上项目列表的分页接口:
在这里插入图片描述
可以看到已经触发了刷新token接口,并且重新请求上次失败的列表接口,无感刷新token逻辑已经正常,但为什么列表接口请求成功,还一直loading没关闭捏,就是因为后续代码未执行,await接口的返回没有成功resolve

3、排查await的列表接口为何没有成功resolve
(1) 列表页
在这里插入图片描述
(2) 接口配置页
在这里插入图片描述
(3) 接口全局配置文件api/index.js,就是在此处将接口返回数据resolve回来,此时再看http.request方法
在这里插入图片描述
(4) uni.request封装文件request.js,发现问题所在,当接口请求失败时,这里直接reject了,那么真相大白;
在这里插入图片描述

熟悉promise的话,应该知道:

  • resolve一个promise相当于返回一个新的promise
  • await语句要成功获取到值时,该promise必须是resolve的fulfilled状态,如若未对await语句进行try catch处理,那么会阻止后续代码的执行
    在这里插入图片描述
    所以怎么改呢,将上述request.js文件的reject替换成resolve即可解决啦!
http://www.hrbkazy.com/news/28687.html

相关文章:

  • 音乐培训如何做网站宣传营销策划书范文案例
  • 网站合作客户百家号关键词seo优化
  • 做网上推广上海seo顾问
  • 深圳分销网站制作广州网站建设公司
  • 武汉网络公司武汉做网站公司搜索引擎优化的方法与技巧
  • 重庆网站模板建站公司河南网站推广公司
  • 手机网站自助建域名注册查询软件
  • 网络营销推广公司找哪家哪里可以学seo课程
  • 做微信小程序是不是不用做网站排名点击工具
  • 心悦每周免做卡网站怎么在百度推广自己的公司
  • 为什么凡科网做的网站无法搜索网络seo是什么意思
  • 青岛网站开发搜索引擎营销的主要模式
  • 湛江做网站制作百度seo搜索引擎优化培训
  • 网站模板英文网站优化搜索排名
  • 网站开发的论文题目优化seo系统
  • 唐山做网站网站功能优化
  • 网站建设 工具东莞网站seo公司
  • 网上店铺怎么开通seo优化首页
  • 生态文明建设网站专题培训seo管理
  • 微网站栏目网络推广公司简介
  • 如何做微网站网址注册查询
  • 婴儿网站建设住栏目域名比价网
  • 网站申请建设经典软文案例200字
  • 便民信息推广平台seo排名快速刷
  • 那个网站专利分析做的好广告资源对接平台
  • 资源网站免费的seo初级入门教程
  • seo的描述正确西安seo关键词排名优化
  • 做python项目的网站互联网产品运营
  • 厦门网站建设要多少钱友情链接在线观看
  • 做网站css代码北京十大教育培训机构排名