关闭

JavaScript循环计数器

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

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

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

js各种取整方式及方法_四舍五入、向上取整、向下取整

js实现:四舍五入、向上取整、向下取整等方法。parseInt、Math.ceil、Math.round、Math.floor、toFixed等的使用

js中的位运算及用法

位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观

如何得到一个数据流中的中位数?

如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流

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

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

ES6中扩展运算符(spread)和剩余运算符(rest)

扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值;rest运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组

js 检验四则运算字符串是否合法

是可以通过检验的,并且在js中也是按数学表达式计算结果的, 但是这个算不算“合格”的数学表达式呢?这个就看具体情况了吧,要规避也比较简单

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

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

js中的相等==

今天学习 jest,看文档的时候发现 jest 用到了 Object.is(),以前没有见过,所以记录下来,供以后开发时参考,相信对其他人也有用。如果下列任何一项相同,则 Object.is(value1, value2) 返回 true:

JavaScript 中的求值策略

最近在研究 lambda演算 中的 η-变换 在 JavaScript 中的应用,偶然在 stackoverflow 上看到一个比较有意思的问题。关于 JavaScript 的求值策略,问JS中函数的参数传递是按值传递还是按引用传递?回答很经典。

JS小数运算失精度的问题

浮点数值的最高精度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制

点击更多...

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