美文网首页
客户端轮询后台接口

客户端轮询后台接口

作者: 想溜了的蜗牛 | 来源:发表于2020-12-05 17:40 被阅读0次

    流水帐++
    场景: 前端提交数据后,后台开始检查,并返回结果。但结果返回是异步的,决定5秒轮询一次后台,3次没返回就让用户稍后再访问

    处理思路:第一反应肯定是使用 setInterval , 但在之前对setInterval有不太好的使用体验与印象,所以还是上网看了看有没更好的方案。方案有两个,一是使用setTimeout, 一是用长连接。并不想开长连接,所以选择用第一个setTimeout,这个方案其实也简单,代码也容易看懂。

    注意事项: 使用 setTimeout 或 setInterval 一定记得页面销毁时要执行清除操作

    以下代码仅作参考,只是片断(小程序代码):

    data() {
        return {
            ...,
            fetchTimes:0,
            timeoutIds:[],
        }
    },
    
    onLoad(){  
      fetchResult()
    },
    
    fetchResult(){
        const resp = await uni.request({
                url: API.check,  
                method: "GET",
            });
        const [err, res] = resp
        if(res.data.state==="checking"){
            this.fetchTimes++  // 次数++
            if(this.fetchTimes<3){ //只向后台发起3次请求,
                let timeId =setTimeout( ()=>{
                    this.fetchData()
                }, 5*1000)  // 5秒一次
                this.timeoutIds.push(timeId)
            }else{
                uni.showModal({
                    title: '检测中,可以稍后再查看哦~。',
                });
            }
        }else{
            // do sth ...
        }
    },
    
    onUnload() {
        this.timeoutIds.foreach( id=>{
            clearTimeout(id)
        })
    },
    
    

    参考

    1. 前端轮询方案与 ReactHook 实践
    2. 小程序中setTimeout轮询判断数据更新后跳转

    相关文章

      网友评论

          本文标题:客户端轮询后台接口

          本文链接:https://www.haomeiwen.com/subject/jumgwktx.html