文章插图
现在因为有个上传组件他用到了这个mixin文件,这个mixin文件中mounted请求了接口,这样一个页面中如果有多个上传组件的话,那么就会导致一上来就会一次性请求多个重复的接口,有什么好点的方法吗,如果不放在vuex中的话 。
【怎么解决Vue中多个相同组件重复请求的问题?】解决方法:
这种情况下的 getSignature 最好是 Singleton 的,可以写个模块导出 。mixin 里的 getSignatrue 都直接引用或调用这个 Singleton 的 getSignature 。
因为大家都调同一个 Signature,那么可以在这里做一些判断和处理,基本思路就是,
- 有缓存拿缓存
- 没缓存判断如果是第 1 个请求的,就去请求远端
- 如果不是第 1 个请求的,就等
let cache = null;let count = 0;async function delay(ms = 200) {return new Promise(resolve => setTimeout(resolve, ms));}export async function getSignature() {if (cache) { return cache; }if (count++) {// 如果有计数说明自己不是第 1 个,就等 。注意这里判断的是加之前的 count// 循环里最好再加个超时判断while (!cache) { await delay(); }} else {// 是第 1 个就去请求// 如果这里有可能会抛异常,抛异常也不要漏了 count--// (这个示例代码没做容错,自己加)cache = await fetchSignature();}count--;// 记得减回去,方便以后如果要刷新 cache 的时候用return cache;}
推荐阅读
- 薏米怎么老有一股霉味
- 伊能静|恋爱长跑14年后婚内出轨,再婚被传“婚变”,伊能静怎么了?
- fancl胶原蛋白怎么样……FANCL是什么的缩写这个无填加的 这英文有缩写吗?
- 椰子肉怎么吃煲汤
- |陈法拉在国外怎么了?想秀身材却被网红鞋毁了,发型妆容更拖后腿
- 钓鱼技巧|春季突然降温,鱼不好钓怎么办?春季降温天气的钓鱼技巧
- |现在老版的“背绿一角”,收藏价值怎么样?
- 耳机有杂音是手机问题还是耳机问题!耳机有噪音怎么回事?
- 本科学历学位怎么填写才正确?本科学位是什么学位?
- 招聘|探索MBTI-95:思考型(T)如何在职场中做好冲突解决