setInterval(
a()
, 1000)
以上定时器,每1秒执行一次a
假如a执行时间超过1s,会怎么样呢?
比如某些清算中心,每1秒检查系统有没有充值失败的,如果有充值失败的,则再次进行充值,那这里就有可能出现多次充值的情况,
假如发现10笔充值失败的,1秒处理一笔,那第一次获取到10笔失败记录,进行处理,处理到第二笔时,下一秒计器活动又开始,又能获取到9笔失败记录
那么这9笔记录会在两个任务中处理,第10笔记录,在10秒内会被处理10次,极有可能会出现重复的情况。
有没有办法,能够保持在上一次a执行完以后,才执行下一次?
写法一:
var timer = setInterval(await a(), 1000);
aync a(){
clearInterval(timer);//将第一个计bai时器du清空
timer = null;
.....
执行业务代码
......
timer = setInterval(await a(), 1000);
}
写法二:
function run(){
return new Promise(function(resolve,reject){
resolve()
});
}
async function main(){
let result = await run();
setTimeout(async ()=>{
await main();
},1000);
}
main();