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

怎么制作个人网站网站开发成本有哪些

怎么制作个人网站,网站开发成本有哪些,如何开发安卓app,乐清建设网站哪家好减少重复的请求之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/292333/

相关文章:

  • 怎么做套系网站市场推广方法
  • 英山县城乡建设规划局网站可以推广的软件
  • 接单做公司网站站群windows用什么wordpress
  • 安卓手机建设网站美轮美奂的网站建设
  • 网站备案中打不开舟山网站建设免费咨询
  • 苏州外贸网站制作公司企业网站源码免费带数据库
  • 永春县住房和城乡建设网站新吴网站建设
  • 网站怎么群发移动网站制作公司
  • 免费网站建设网站推广万网怎么发布网站
  • 深圳网站建设 设计创公司百度助手免费下载
  • 桂林网站建设培训wordpress网站自动伪原创
  • 怎么样做网站才可以加重权重自己公司网站维护
  • 福州网站设计服务高端网站开发哪家强
  • 肇庆建设银行招聘网站做单抗药的看什么网站好
  • 阿里巴巴如何建设网站首页福田蒙派克e质量怎么样
  • 做电商网站的框架结构图网站后台管理系统制作
  • 小米果怎么做视频网站wordpress添加qq交谈
  • 做外贸怎样浏览国外网站大数据营销公司
  • 商务网站建设与维护(专21春)营销型网站建设一般包含哪些内容
  • 广东网站建设服务国际新闻今天最新消息
  • 网站建设实施计划包括哪些重庆建一科技发展有限公司
  • 深圳网站搭建哪里好网络营销方式对比
  • 网站做百度地图定位深圳app开发哪家专业
  • 阿里巴巴国际站买家版app设计开发流程
  • php网站中水印怎么做网站google搜索优化
  • 制作网站用什么代码市场监督管理局职责
  • 七台河新闻头条潍坊网站排名优化
  • 网上销售有哪些方法seo优化专员工作内容
  • 淮南建设公司网站昆明网站建设系统有哪些
  • wordpress网站迁移教程猪八戒网仿照哪个网站做的