Vue项目实战04 : Vue 轮询接口的实现

举报
达拉崩巴斑得贝迪卜多 发表于 2021/12/20 22:05:47 2021/12/20
【摘要】 项目中我们经常需要实现轮询-每隔几秒请求一次接口刷新数据 一般都会使用setInterval,但要注意单纯使用它会导致页面卡死,所以一定要清除定时器 setInterval不会清除定时器队列,每重复执...

项目中我们经常需要实现轮询-每隔几秒请求一次接口刷新数据

一般都会使用setInterval,但要注意单纯使用它会导致页面卡死,所以一定要清除定时器

setInterval不会清除定时器队列,每重复执行1次都会导致定时器叠加,最终卡死你的网页。
但是setTimeout是自带清除定时器的

mounted () {
    const timer = window.setInterval(() => {
      setTimeout(function () {
      // chooseProduct 自己封装的axios请求 
        chooseProduct({
          'promptKey': 'selectitem',
          'serialNum': '000'
        }).then(res => {
           //视情况而定
          if (res.data.code === 0 ) {
            // 这里可以写一些中止轮询的条件 比如code值返回0时  
            clearInterval(timer)
          }
        })
      }, 0)
    }, 2000)
    // 清除定时器
    this.$once('hook:beforeDestroy', () => {
      clearInterval(timer)
    })
  }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21


封装

// polling-utils.js

/**
     * @descripting 轮询功能
     * @param {String} type 请求类型
     * @param {String} url 地址 
     * @param {Object} data 请求数据 
     * @param {Number} delay 轮询间隔时间
     */
    export default function polling(type, url, data, delay = 1000) {
        return new Promise((resolve, reject) =>{
            ajax[type](url, data).then(res => {
                if (res.data === 'polling') {  // 这个继续进行轮询的条件,需要根据自己的需要修改
                    setTimeout(() => {
                        resolve(polling(type, url, data, delay));
                    }, delay)
                } else {
                   resolve(res);
               }
           })
       })
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

使用

import polling from 'utils/polling-utils';

polling('post', url, data).then(res => { console.log(res) })


  
 
  • 1
  • 2
  • 3
  • 4

文章来源: lvsige.blog.csdn.net,作者:祥子的小迷妹,版权归原作者所有,如需转载,请联系作者。

原文链接:lvsige.blog.csdn.net/article/details/109078287

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。