JS经常会遇到延迟执行的动作,并且失败后自动尝试,尝试N次之后就不再尝试的需求,今天刚好又遇到,于是写个闭包,以后不断完善继续复用。
用法:
// 检查并计数 // 第一个参数用来标记是尝试哪个动作的,第二个参数是最大尝试次数 // 返回 true表示未达到最大值 false表示超过最大值 Counter.check('play', 3); // 执行前3次返回true,第4次返回false,第5次返回true开始新循环... // 计数器清0,执行成功后清空计数 // 第一个参数是标记 Counter.reset('play'); // 查看计数器值 // 第一个参数是标记 Counter.see('play');
我的使用例子:
function action() { // do something or check something if (success || ready) { // 成功后清空计数器 Counter.reset('play'); return true; } // 重试次数超过10次 则 返回结束 if (! Counter.check('play', 10)) return false; // 重试次数少于等于10次 则 500毫秒后继续尝试 setTimeout(function(){ action(); }, 500); return false; }
源码:
var Counter = (function () { var flagArr = [], countArr = []; var getIndex = function (flag) { let index = flagArr.indexOf(flag); if (index == -1) return flagArr.push(flag) - 1; return flagArr.indexOf(flag); } return { check: function (flag, max) { let index = getIndex(flag) if (countArr[index] == undefined) countArr[index] = 0; countArr[index] ++; if (countArr[index] > max) countArr[index] = 0; return Boolean(countArr[index]); }, reset: function (flag) { countArr[getIndex(flag)] = 0; }, see: function (flag) { let index = getIndex(flag); return (countArr[index] == undefined) ? 0 : countArr[index]; } } })();
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210629.html原文链接:https://javaforall.net
