Promise + memoize 高级模式

2021-01-25  本文已影响0人  wyc0859

请求中常会遇见这样的情况:
适合结果不变且多次调用的函数或复杂的计算函数,如购物车计算
数据不变有不变的安全性,变有变的多适用性

    import memoize from 'memoizee';
    export default {  
        onShow(){ 
            this.ls_request()  
        }, 
        methods: {
                ls_request(){
                var funb = (async res=> {
                    let data=await this.$api.get("banner/banner_all_item") 
                    return data.data;
                }) 
                //仅封装,会请求2次
                // funb()
                // funb()
                
                //封装+缓存,只会请求一次,但缓存的请求结果如果是错误,后面使用也会不方便
                //let b=_.memoize(funb)    // lodash的memoize
                //b().then(re=>{
                //  console.log("re1",re)
                //}) 
                //b().then(re=>{
                //  console.log("re2",re)
                //})
                
                /*
                 *  接口请求,你应考虑操作可能失败的可能性。缓存了被拒绝的Promise,
                 *  则所有将来的调用都将以同样的失败 Promise 被拒绝!而memoize库解决了这个问题,示例变为:
                */
                let c=memoize(funb)
                c().then(re=>{
                    console.log("re33",re)
                }) 
                c().then(re=>{
                    console.log("re44",re)
                }) 
            },
        }
    } 
上一篇 下一篇

猜你喜欢

热点阅读