定时器-前端使用定时器3s轮询状态接口,2min为接口超时

背景

众所周知,后端是处理不了复杂的任务的,所以经过人家的技术讨论之后,把业务放在前端来实现。记录一下这次的离大谱需求吧。

如图所示,这个页面有5个列表,默认加载计划列表。但是由于后端的种种原因,这个列表接口不能直接调取。

要先调一个查询状态的接口,每 3s 轮询一次,如果返回的计划状态字段campaign为 true,才可以调列表page接口。

如果 30s 的时候还没为 true,表格的加载文案变成“数据量较大,拼命加载中,请耐心等待”。

如果2min的时候还没为 true,停止轮询,表格显示为“数据量较大,加载超时,请稍后”,提供一个重试按钮。

实现思路

首先定义一个全局变量-定时器。

在页面初始化的时候,加载loadData方法,如果定时器存在,清除定时器,防止污染。

定义一个方法lockData,在loadData函数中调用,这个方法的参数为一个异步函数的处理结果,这个异步函数就是查询状态,如果返回的计划状态为真,则调取列表接口,return false,否则return 接口的响应结果(一个对象)

在lockData方法中,定义一个秒数参数curTime,再定义清除定时器的方法。如果定时器不存在,先接收参数,看看查询结果是什么。如果这个参数为 false ,说明之前查询状态的结果是真已经直接调page接口了,此时直接return,结束方法。否则,开启定时器,秒数自增,如果秒数能整除3,且参数存在,调取参数,拿到返回结果,如果结果为 false,则清除定时器。如果curTime 大于200,清除定时器,让表格显示超时样式。

代码如下:

async lockData(func) {
    let curTime = 0
    const clearI = () => {
        clearInterval(Interval)
        Interval = null
        curTime = 0
        this.loadingText = ''
        this.loading = false
    }
    if (!Interval) {
        this.loading = true
        let isClear = await func()
        if (!isClear) return
        Interval = setInterval(async () => {
            curTime++
            if (curTime >= 30) {
                this.loadingText = '数据量较大,拼命加载中,请耐心等待'
            }
            if (curTime % 3 === 0) {
                if (func) {
                    let isClear = await func()
                    console.log('lockData', { curTime, isClear })
                    if (!isClear) clearI()
                }
            }
            if (curTime >= 120) {
                clearI()
                this.tableData = []
                this.timeOutEmpty = true
            }
        }, 1000)
        this.$once('hook:beforeDestroy', () => {
            clearInterval(Interval)
        })
    }
},
async loadData() {
    if(Interval) {
        clearInterval(Interval)
        Interval = null
    }
    this.timeOutEmpty = false
    this.lockData(async () => {
        let response = await this.dataSync()
        return response
    })
},
async dataSync() {
    this.loading = true
    let response = await this.$axios.post('/xxxxx/baseToday', {xxxx})
    if (response.data.status === 0 && response.data.data['campaign']) {
        await this.getData()
        return false
    }
    return response
},
async getData() {
    this.loading = true
    let response = await this.$axios.post('/xxxx/page', {xxxx})
    if (response.data.status === 0) {
        this.tableData = response.data.list
        this.total = response.data.totalCount
        this.$emit('changeTotal', {
            key: 'campaignNum',
            value: this.total
        })
    }
    this.loading = false
}
<div slot="empty">
    <div v-if="timeOutEmpty">
        <span>数据量较大,加载超时,请稍后
            <el-button @click="loadData" type="text">重试</el-button>
        </span>
    </div>
    <span v-else>暂无数据</span>
</div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/736721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序人生:关于RHCE红帽认证这件事

花了两个月备考红帽&#xff0c;最终终于双满分通过。 关于考试 RHCE红帽认证总共需要考两门&#xff1a;RHCSA、RHCE。 RHCSA主要是考察基本的Linux操作&#xff1a;用户、权限、空间扩容、yum、容器等内容。 RHCE主要是考察ansible playbook 代码的开发。 通过考试没有别…

【牛客深信服总结】

1.反转链表 2.协议 交换机路由器 3.手写代码&#xff0c;一个二叉树&#xff0c;从根节点到叶子结点算一条路径&#xff0c;打印出所有路径。 4.一些数据结构相关的问题&#xff0c;包括栈和队列的应用&#xff0c;链表和数组的区别&#xff0c;最大堆和最小堆&#xff0c;动态…

flex布局无法设置图片icon和文本垂直居中对齐问题

项目场景&#xff1a; 需要实现下面的效果&#xff0c;即图标和文字垂直对齐。 问题描述 直接使用flex布局并设置垂直居中&#xff0c;发现并没有垂直对齐&#xff0c;图片明显偏上。 .wrapper {display: flex;align-items: center; }.view-icon {height: 28px;width: 28px;m…

算是一些Transformer学习当中的重点内容

一、基础概念 Transformer是一种神经网络结构&#xff0c;由Vaswani等人在2017年的论文Attentions All YouNeed”中提出&#xff0c;用于处理机器翻译、语言建模和文本生成等自然语言处理任务。Transformer同样是encoder-decoder的结构&#xff0c;只不过这里的“encoder”和“…

OpenGL:中点直线算法

理论部分 中点直线算法是通过在像素中确定与理想直线最靠近的像素来进行扫描转换的。 在上图中,假设直线的斜率 0 ≤ m ≤ 1 0\le m \le 1 0≤m≤1。假设当前最近的像素已经确认为 P ( x k , y k ) P(x_k, y_k) P(xk​,yk​),由于 x x x位最大的位移方向,因此直线在 x x x方…

力扣SQL50 求关注者的数量 分组计数

Problem: 1729. 求关注者的数量 Code select user_id, count(1) followers_count from Followers group by user_id order by user_id;

基于STM32的智能农业灌溉系统

目录 引言环境准备智能农业灌溉系统基础代码实现&#xff1a;实现智能农业灌溉系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能农业管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业灌溉系统通过使用ST…

IDEA各种实体类运行爆红,不运行就没事

1.问题描述 如图所示&#xff0c;后端项目的import的各种entity爆红&#xff0c;点击也有导入包的提示&#xff0c;且这种报红几乎遍布了整个工程项目 2.我的解决方案 清空缓存&#xff0c;然后把target文件删掉&#xff0c;重新跑 3.小结 idea项目有时候就是一个核弹&…

【windows解压】解压文件名乱码

windows解压&#xff0c;文件名乱码但内容正常。 我也不知道什么时候设置出的问题。。。换了解压工具也没用&#xff0c;后来是这样解决的。 目录 1.环境和工具 2.打开【控制面板】 3.点击【时钟和区域】 4.选择【区域】 5.【管理】中【更改系统区域设置】 6.选择并确定…

推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你

目录 矩阵分解的不足贝叶斯个性化排序AUC构造样本目标函数训练方法 总结 矩阵分解在推荐系统中的地位非常崇高。它既有协同过滤的血统&#xff0c;又有机器学习的基因&#xff0c;可以说是非常优秀了&#xff1b;但即便如此&#xff0c;传统的矩阵分解无论是在处理显式反馈&…

分类接口开发

文章目录 1.查询所有一级分类1.sun-club-application-controller 控制层1.SubjectCategoryController.java 定义基础的queryPrimaryCategory&#xff0c;调用领域层 2.sun-club-domain 领域层1.SubjectCategoryDomainService.java2.SubjectCategoryConverter.java3.SubjectCate…

每日一题——Python代码实现力扣1. 两数之和(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 菜鸡写法 代码分析 时间复杂度分析 空间复杂度分析 改进建议 我要更强 方法1: 使…

英伟达下一代DLSS或利用人工智能

英伟达的黄仁勋在2024年Computex展会上的问答环节中&#xff0c;提前透露了公司未来几代深度学习超采样&#xff08;DLSS&#xff09;技术的发展方向。在回答有关DLSS的问题时&#xff0c;黄仁勋表示&#xff0c;未来我们将看到通过纯粹的人工智能生成的纹理和对象。他还提到&a…

体验了一下AI生产3D模型有感

我的实验路子是想试试能不能帮我建一下实物模型 SO 我选择了一个成都环球中心的网图 但是生成的结果掺不忍睹&#xff0c;但是看demo来看&#xff0c;似乎如果你能给出一张干净的提示图片&#xff0c;他还是能做出一些东西的 这里我延申的思考是这个物体他如果没看过背面&…

AI 大模型企业应用实战(13)-Lostinthemiddle长上下文精度处理

1 长文本切分信息丢失处理方案 10检索时性能大幅下降相关信息在头尾性能最高检索 ->> 排序 ->使用 实战 安装依赖&#xff1a; ! pip install sentence-transformers 演示如何使用 Langchain 库中的组件来处理长文本和检索相关信息。 导入所需的库使用指定的预训…

Posix多线程编程总结

Posix在线文档&#xff1a; The Single UNIX Specification, Version 2 (opengroup.org) 本文主要参考这位大神的文章&#xff1a; Posix多线程编程学习笔记 - 凌峰布衣 - 博客园 (cnblogs.com) 线程安全问题 多线程编程中&#xff0c;经常遇到的就是线程安全问题&#xff0c;或…

图片覆盖攻击

点击劫持的本质是一种视觉欺骗。顺着这个思路&#xff0c;还有一些攻击方法也可以起到类似的作 用&#xff0c;比如图片覆盖。 一名叫 sven.vetsch 的安全研究者最先提出了这种 Cross Site Image Overlaying 攻击&#xff0c;简称 XSIO。sven.vetsch 通过调整图片的 style 使得…

CDP问卷的目的是什么?CDP问卷对企业有什么好处

CDP问卷&#xff08;Carbon Disclosure Project问卷&#xff09;的目的是多方面的&#xff0c;主要包括以下几点&#xff1a; 推动透明度&#xff1a;CDP问卷要求企业公开披露其温室气体排放数据、减排目标和行动&#xff0c;以及气候风险管理策略等信息。这有助于增强企业的透…

Linux进程概念(二)

上期我们已经学习了进程的基础的内容&#xff0c;已经对进程的基本概念有了了解&#xff0c;知道了进程的组成&#xff0c; 本期我们将以操作为主进一步探讨进程的相关概念。 目录 查看进程 创建进程 查看进程 查看进程主要有两种方式。 ps ajx指令 在当前目录下有名为tes…

Canvas绘制图片和区域

如何使用Canvas在图片上绘制区域&#xff1f; 一. 首先&#xff0c;我们需要初始化三个canvas画布&#xff08;初始化Canvas&#xff09; initCanvas() {// 初始化canvas画布let canvasWrap document.getElementsByClassName("canvas-wrap");this.wrapWidth canva…