关闭

JavaScript循环计数器

时间: 2019-01-02阅读: 1312标签: 运算

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 somthing
    if (success || ready) {
        // 成功后清空计数器
        Counter.reset('play');
        return true;
    }
    // 检查是否重试超过10次
    if (! Counter.check('play', 10)) {
        return false;
    }
    // 500毫秒后继续尝试
    setTimeout(function(){
        action();
    }, 500);
    return false;
}


源码: 

var Counter = (function () {
    var flagArr = [];
    var count = [];
    var getIndex = function (flag) {
        if (flagArr.indexOf(flag) == -1) {
            flagArr.push(flag);
        }
        return flagArr.indexOf(flag);
    }
    return {
        check: function (flag, max) {
            let index = getIndex(flag)
            if (count[index] == undefined) {
                count[index] = {
                    count: 1,
                }
                return true;
            }
            count[index].count ++;
            if (count[index].count > max) {
                count[index].count = 0;
                return false;
            }
            return true;
        },
        reset: function (flag) {
            count[getIndex(flag)] = {
                count: 0,
            }
        },
        see: function (flag) {
            let index = getIndex(flag);
            return (count[index] == undefined) ? 0 : count[index].count;
        }
    }
})();


 来自:https://blog.csdn.net/c513881038/article/details/85551612


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1746

关闭

用javascript怎么求最小值?

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

es6 扩展运算符 三个点(...)

扩展运算符( spread )是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

(a == 1 && a == 2 && a == 3)为true,你所不知道的那些答案

看到这个标题,一部分同学的第一反应可能是,又是这个老套的问题,人家都讲过好多遍了你还讲。同学,你想错啦。我可不是在炒冷饭。今天我们要从这个问题,延伸出更多的知识,保证超出你的预期

判断一个数是否为质数

质数是指在大于1的自然数中,除了1和它自身外没有其他因数的自然数。flag初始值为true,当n%i === 0时(1<i<n),说明n不是质数,此时flag值为false且循环终止;

Js new运算符

new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new关键字会进行如下的操作:1. 创建一个空的简单JavaScript对象(即{});2. 链接该对象(即设置该对象的构造函数)到另一个对象 ;

巧用JS位运算

位运算的方法在其它语言也是一样的,不局限于JS,所以本文提到的位运算也适用于其它语言。位运算是低级的运算操作,所以速度往往也是最快的

javascript逻辑运算符有哪些?

JavaScript逻辑运算符有&&(逻辑与)、||(逻辑或)、!(逻辑非)。JavaScript逻辑运算符用于测定变量或值之间的逻辑。

JS解决加减乘除浮点类型丢失精度问题

当我们在前端使用js来执行运算时,会有丢失精度的问题。

理解JS中的加号运算符

+的使用有两种情况 ,当+连接两个变量或值时即为二元运算符,比如a + b,当+在变量或值前面时,则为一元运算符。直接转换为Number类型,相当于Number()

js中四舍五入保留两位效数,js中将Number转换成字符类型

在js文件中做简单的加减乘除四则运算,一定要注意:先将字符类型转换成Number类型,在最后的输出值的时候在转换成字符类型(调用的是toString()方法),如果不这样做的话,是会报错的。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!