事情起因
在小程序蓝牙写入时,如果短时间内,多次调用,将会导致部分调用写入失败,因此,我就想简单写一个队列来进行写入的调用
逻辑分析
小程序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秒钟之后才能发送完成,写入执行的话就更久了,那么就会给用户一种卡顿的感觉,具体的解决思路还是要看需求,看更加注重准确性还是用户体验,但是那个就不是本篇的主题了.