小程序钟自定义一个简单的队列

456 阅读1分钟

事情起因

在小程序蓝牙写入时,如果短时间内,多次调用,将会导致部分调用写入失败,因此,我就想简单写一个队列来进行写入的调用

逻辑分析

小程序onshow的时候,定义一个selfData,用来存放本次所需的一些数据,同时开启定时器

onShow: function(){
    this.selfData = {
        doNum= 0, //执行次数
        writeArr = [],  //用来存放写入时需要的参数
        timeStamp = 0 //时间戳
    }
    this.timerFnc()
}

当需要写入的时候,调用doWrite传递参数

doWrite: function(obj){
    this.selfData.writeArr = this.selfWirteArr.concat(obj)
}

获取时间戳函数(也可以直接使用微信提供的时间戳)

getTime: function(){
    let date = new Date()
    return date.getTime()
}

在定时器中主要处理主要逻辑

timerFnc: function(){
    let {doNum, writeArr, timeStamp } = this.selfData
    let nowTime = this.getTime()
    let num = nowTime - timeStamp //时间间隔
    if(num<199&doNum<writeArr.length){
        this.selfData.doNum++  //这里必须要加上this.selfData
        this.selfData.timeStamp = nowTime
        let obj = this.selfData.writeArr[this.selfData.doNum]
        write(obj)
    }
    this.setTimeTimer = setTimeout(this.timeFnc,100)
}

在onHide的时候清空计时器与自定义数据

onHide: function(){
    this.selfData = {}
    clearTimeout(this.setTimeTimer)
}

结束语

这只是其中的一种解决思路,还有很多不足,譬如用户1秒钟暗了10次,按照本次的逻辑,要等到2秒钟之后才能发送完成,写入执行的话就更久了,那么就会给用户一种卡顿的感觉,具体的解决思路还是要看需求,看更加注重准确性还是用户体验,但是那个就不是本篇的主题了.