背景:
经过业务长时间打磨,往往会沉淀诸多公用的方法和能力,比如获取用户信息,获取某场景配置信息等。在我们进行可视化搭建页面时,往往会存在多模块调用同一个公用方法的情况,比如这个模块需要进行用户信息展示,那个模块需要判断用户是否符合活动人群。如果全局没做状态管理的话,每调用一次,就会发起一次请求。在大流量的场景下,不但会提升qps,可能触发服务器调用阀值,影响用户体验,同时也很浪费服务器资源,这个时候我们就可以去做一个Promise的缓存。这也是面试经常被多形式问到的问题。
一个普通的异步调用
let times = 1; const mockRequest = ()=>{ return new Promise((resolve, reject)=>{ setTimeout(()=>{ console.log('执行第'+times+'次'); let userId = '123'; times++; resolve(userId); }, 3000) }) } const doMoreRequest = () => { //执行多次 mockRequest().then(res=>{ console.log('res1:', res) }) mockRequest().then(res=>{ console.log('res2:', res) }) }