/*
功能:
改进后的 setInterval,内部由 setTimeout 实现
间隔时间为两次 function 开始和结束之间的时间,而不是两次开始的间隔时间
具体区别请参见这篇文章:《JS中不要使用setInterval的原因分析》http://hzy.pw/p/1847
参数:
function:要执行的函数
接受参数 int:第几次执行
返回值为 false 则中断循环,否则继续循环
返回值为整数,则设定为下次循环的间隔时间
int:默认间隔时间,单位毫秒
返回值:
handle, 用于传给 loop_stop() 终止循环
版本:
1.3.1.5
2016年8月25日
*/
var loop_handles = {};
function loop(fun, delay) {
var times = 0,
handle = 'hzy' + Math.random();
loop_handles[handle] = true;
function inner() {
if (loop_handles[handle]) {
let ret = fun(++times);
if(parseInt(ret) === ret)
setTimeout(inner, ret);
else if(ret!==false)
setTimeout(inner, delay);
else
delete loop_handles[handle];
}
}
inner();
return handle;
}
/*
接受 loop 返回的 handle 用于终止循环
终止成功返回 true
*/
function loop_stop(handle) {
return delete loop_handles[handle];
}
export { loop_stop, loop };