weixin_41096911 2021-04-22 13:45 采纳率: 33.3%
浏览 531
已采纳

vue 使用两个setInterval 出现混乱

现在的业务需求是:1. 定时刷新页面,因为数据库数据可能会更新 2. 页面滚动展示,只展示6条数据 

我的思路是:1. 设置第一个定时器自动刷新页面 2. 设置第二个定时器改变列表数据,移走前六条加到列表末尾,每次只展示前六条

created() {
        this.getData();
        this.play();
    },
    methods: {
        getData() {
            // 取数据
        },
        play() {
            setInterval(this.getData, 7000);
            setInterval(this.change, 3000);
        },
        change() {
            if(this.dataList.length > 6){
                for (let i=0; i<6; i++){
                    this.dataList.push(this.dataList[i])
                    this.dataList.shift()
                }
            }
        }
    }

但是会混乱,就是getData根本不是用的7s,而是3s
请问该如何解决呢,谢谢!

 

补充问题:这样的模式是因为这个页面是要用作投影的,就是几乎不会有用户去自动刷新……

也就是说现在的流程是:打开页面,展示第一波六条数据、再展示下一波的六条数据,所以我需要动态展示六条数据,ok过一会儿刷新刷新数据库,因为数据库会有新增,这个时间肯定会等待得长一点

  • 写回答

5条回答 默认 最新

  • Go 旅城通票 2021-04-22 14:44
    关注

    获取数据7s是肯定没错的,混乱是因为你的change有问题。你的代码是shit移除第一个后,第二个跑第一位,而你的i++又操作下一个了,导致原来2,4,6,8这种位置的数据被删除了,而使用下一个位置的数据替换,多次执行后会导致出现重复的数据

     

    要轮流显示应该每次都是操作第一个数据项,因为shift后下一个数据跑第一位了

                if(this.dataList.length > 6){
                    for (let i=0; i<6; i++){
                        this.dataList.push(this.dataList.shift())//可以直接合并为一句就行,shift会返回第一个元素,直接压如最后                    
                    }
                }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备