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

设计师的网站有哪些厦门企业网站建设

设计师的网站有哪些,厦门企业网站建设,wordpress404页面,潍坊美丽乡村建设一般发了哪个网站减少重复的请求之promise缓存池 —— 缓存promise,多次promise等待并返回第一个promise的结果 背景简介 当一个业务组件初始化调用了接口,统一个页面多吃使用同一个组件,将会请求大量重复的接口 如果将promise当作一个普通的对象&#xff0…

减少重复的请求之promise缓存池 —— 缓存promise,多次promise等待并返回第一个promise的结果

背景简介
当一个业务组件初始化调用了接口,统一个页面多吃使用同一个组件,将会请求大量重复的接口

如果将promise当作一个普通的对象,进行缓存

/*** 数据缓存池* @param key 唯一标识* @param obj 被缓存的对象*/
function CachedObj() {this.cacheMap = new Map(); //? 缓存池this.get = (key, obj?) => { //* 获取某一个promise的数据(第一次执行设置,第二次执行获取)if (!this.cacheMap.has(key) && obj) {this.set(key, obj)}return this.cacheMap.get(key);}this.set = (key, obj) => { //* 设置某一个promise的数据this.cacheMap.set(key, obj);}this.delete = (key) => { //* 删除某一个promise的数据this.cacheMap.delete(key)}this.clear = () => { //* 清空重置所有的数据this.cacheMap.clear()}
}
const cachedObjInstance = new CachedObj()

此时会发现,依旧会多次执行相同的promise(调用多个相同的接口),所以
promise的缓存,难点是如何将一旦新建就会立即执行的promise缓存

那如何让promise步立即执行,我想到了函数,第一个设置并缓存promise时,执行promise

公共的地方设置异步缓存池的构造器以及公共的构造器实例

/*** 异步缓存池* @param promise 被缓存的异步* @param key 唯一标识* @returns 同一个异步*/
function CachedPromise() {this.cacheMap = new Map(); //? 缓存池this.get = (key, promiseFn?) => { //* 获取某一个promise的数据(第一次执行设置,第二次执行获取)if (!this.cacheMap.has(key) && promiseFn) {this.set(key, promiseFn())}return this.cacheMap.get(key);}this.set = (key, promise) => { //* 设置某一个promise的数据this.cacheMap.set(key, promise);}this.delete = (key) => { //* 删除某一个promise的数据this.cacheMap.delete(key)}this.clear = () => { //* 清空重置所有的数据this.cacheMap.clear()}
}
const cachedPromiseInstance = new CachedPromise()

业务内使用

//todo 设置个性化待办的信息
const getWaitCustomizeInfo = async () => {if (AppModule.waitCustomizeInfo) { //* 单例模式,存在则不再请求接口return await AppModule.waitCustomizeInfo}const defaultCustomizeInfo = {waitPermission: 'personal', //? 默认”只看自己“}try {const res = await cachedPromise.get('globalWaitCustomizeInfo', () => system.userMenuPersonal.userMenuPersonalDetail.request({ menuCode: 'globalWaitCustomizeInfo' }))if (res.data) {const personalMenus = res.dataconst savedInfo = personalMenus.menuPersonalValue ? JSON.parse(personalMenus.menuPersonalValue).headerValue : defaultCustomizeInfoconst waitCustomizeInfo = { id: personalMenus.id, ...savedInfo }AppModule.setWaitCustomizeInfo(waitCustomizeInfo)return waitCustomizeInfo}AppModule.setWaitCustomizeInfo(defaultCustomizeInfo)return defaultCustomizeInfo;} catch (error) {AppModule.setWaitCustomizeInfo(defaultCustomizeInfo)return defaultCustomizeInfo;}
}

完美解决!!!

当缓存中的异步完成后,还继续执行下一个异步时,可以改造一下,使用isFulfilled或者then来判断,异步是否完成

/*** 异步缓存池* @param continueWhenFinished 当缓存中的异步完成后,继续执行下一个异步* @param key 唯一标识* @param promise 被缓存的异步* @param promiseFn 返回需要缓存异步的函数*/
function CachedPromise(continueWhenFinished = false) {this.cacheMap = new Map(); //? 缓存池this.get = (key, promiseFn?) => { //* 获取某一个promise的数据(第一次执行设置,第二次执行获取)if (this.cacheMap.has(key)) { //* 已有缓存时// if (this.cacheMap.get(key).isFulfilled() && promiseFn) { //* 已有缓存,continueWhenFinished 为true,且缓存中的异步已经完成时,执行新的异步并缓存if (continueWhenFinished && typeof this.cacheMap.get(key).then !== 'function' && promiseFn) { //* 已有缓存,continueWhenFinished 为true,且缓存中的异步已经完成时,执行新的异步并缓存this.set(key, promiseFn())}}if (!this.cacheMap.has(key) && promiseFn) { //* 没有缓存数据时,进行设置this.set(key, promiseFn())}return this.cacheMap.get(key);}this.set = (key, promise) => { //* 设置某一个promise的数据this.cacheMap.set(key, promise);}this.delete = (key) => { //* 删除某一个promise的数据this.cacheMap.delete(key)}this.clear = () => { //* 清空重置所有的数据this.cacheMap.clear()}
}
const cachedPromiseInstance = new CachedPromise()```

注意实现
1、promise一旦新建就会立即执行,所以 要将promise保成函数传入;
2、构造器实例,必须在初始化调用接口的组件外部使用,才能起到缓存promise的作用;放在组件内,每次都会创建一个全新的缓存池
3、记得要处理promise rejected的场景

http://www.yayakq.cn/news/701844/

相关文章:

  • 不懂编程如何做网站警告欺骗网站模板
  • 专门做高端网站设计的云华设计学做网站有前
  • 个人网站备案不通过天津市建设 中标公示网站
  • 做网站客户要求分期云服务器可以放几个网站
  • 长春网站制作最专业郑州做网站的大公
  • 河北网站优化建设搜seo
  • 茅台酒网站建设方案方圆网通网站建设公司
  • 衡水建设局网站企业网站开发环境
  • 北京大龙建设集团有限公司网站首页深圳网站建设方案书
  • 做网站工作描述企业信息管理系统的设计与实现
  • 手机和网站页面模板网络信息有限公司
  • 中国企业网站建设现状c mvc 网站开发进阶之路
  • 建站资源免费企业网站规划方案
  • 宿迁做网站哪家好哈尔滨优质的建站销售价格
  • 苏州网站建设空间网站制作大概多少钱
  • 用了siteapp是不是手机访问网站就变成siteapp的内容了网页制作接单
  • 客栈网站建设代码ps做好的网站如何做链接
  • 一般企业网站3年多少钱如何引用网站图片
  • icp网站信息php 网站301
  • 企业网站设计图片wordpress仿站博客视频
  • 免费网站排名大全seo团队管理系统
  • 2017网站开发语言排名实用网站建设知识点
  • 网站建设实训教程深圳专业网站公司
  • 做游戏难吗比做网站中山中小企业网站制作
  • 南昌知名网站建设公司为该网站做自适应
  • 龙岩网站建设加盟做网站本溪
  • wordpress经典主题选择小时seo
  • 东莞企业网站搭建制作中国网建
  • 购物网站的开发网站建设是什么?
  • 深圳网站建设大全phpwind 做企业网站