最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 队列在项目中的应用

    正文概述 掘金(HerryLo)   2021-01-18   456

    这次总算是用上了数据结构啦,不然我自己也快忘了,知识只有在使用的前提下,才是活的知识,才不容易忘记。这次在项目中用到的是队列,当然这里不是为了秀,只是为了记录、总结,分享开发中的心得。

    任务需求——是控制多个弹窗的展示,需要有优先级,同时也需要根据数据的状态,来展示不同的弹窗。如果是直接通过硬编码的形式控制,通过if-else其实也可以解决这个问题,但这会导致代码的耦合,不利于后期的维护和迭代,如果需要增加弹窗,反而还需要一段一段的修改,而通过队列控制,每一个弹窗都是一个函数,是否展示根据每个函数调用的结果来保证,好了我们来说说具体思路吧!

    #具体思路和代码

    需求:现在有A、B、C三个弹窗,需要在app首页展示,需要控制它们的展示顺序,展示顺序是A——>B——>C...等,每个弹窗只展示一次。当A弹窗展示之后,叉掉A弹窗,才会再展示B弹窗,以此类推。但也会有一种情况,比如在app首页展示了A,但是用户未操作,直接点击到app个人中心,当再次进入首页时,需要展示B弹窗,以此类推。

    大致的需求如上,其中还有一些小的细节,在这里就省略了,我们现在需要来对它进行实现。

    let APopShow = getStorage('APopShow')
    let BPopShow = getStorage('BPopShow')
    let CPopShow = getStorage('CPopShow')
    if(!APopShow) {
        AShow = true
        setStorage(!AShow)
        return;
    }else if(!BPopShow) {
        BShow = true
        setStorage(!BShow)
        return;
    }else if(!CPopShow){
        CShow = true
        setStorage(!CShow)
        return;
    }
    

    上面就是一个最简易的代码了,这个伪代码非常的简洁,if - else if - else if ....通过一系列的if-else来控制展示的顺序。这里会封装为一个公用的弹窗组件,来控制多个弹窗的展示。

    #使用队列优化

    队列可以很好的解决这个问题,避免大量的if-else,队列是先进先出,通过队列控制函数调用,而函数中就是具体的业务逻辑了。我们这里是用队列的知识,不是完全照搬队列!!

    let Queue = [];
    let AShow = false;
    let BShow = false;
    let CShow = false;
    
    function pushQueue(fnc) {
        if(fnc instanceof Function){
            Queue.push(fnc);
        }
    }
    function runQueue() {
        for(let fn item Queue) {
            fn();
        }
    }
    
    function AFunc() {};
    function BFunc() {if(AShow) return false;};
    function CFunc() {if(BShow) return false;};
    
    pushQueue(AFunc);
    pushQueue(BFunc);
    pushQueue(CFunc);
    
    runQueue();
    

    队列只是负责允许就是了,而具体的业务逻辑,在各自的业务函数中,自己去实现就可以了,我们在这里做到了一定程度的代码分离。当然这只是简易的代码实现,具体的细节可以调整和优化。

    在这里通过队列,对代码进行了解耦,也利于后期来扩展和维护了。以上就是通过队列实现的逻辑了,其实还可以通过订阅发布模式来实现,控制多个弹窗的展示,拆分多个组件,通过全局的状态,同时通过发布订阅,来控制弹窗的展示和顺序。大家也可以考虑一下!!

    #可以解决哪些问题

    项目中解决的问题:

        1.控制调用顺序,先进先出;
        2.多个弹窗的执行顺序;
        3.大量请求,缓解服务器请求压力;
        4.消息队列;
        。。。等
    

    调用优先级的问题;控制执行顺序;

    #扩展

    有一个需求,在一个事件中需要发出1w个请求,是一次性发出1w个,还是通过其他方式来进行合理控制?留待思考?!!

    参考:个人博客原文链接


    下载网 » 队列在项目中的应用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元