JavaScript循环计数器

JavaScript循环计数器JS 经常会遇到延迟执行的动作 并且失败后自动尝试 尝试 N 次之后就不再尝试的需求 今天刚好又遇到 于是写个闭包 以后不断完善继续复用 用法 检查并计数 第一个参数用来标记是尝试哪个动作的 第二个参数是最大尝试次数 返回 true 表示未达到最大值 false 表示超过最大值 Counter check play 3 执行前 3 次返回 true 第 4 次返回 false

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

(0)
上一篇 2026年3月19日 上午7:13
下一篇 2026年3月19日 上午7:14


相关推荐

  • javaScript动画项目案例

    javaScript动画项目案例javaScript 动画项目案例示例代码 我的 github1 动画库编写匀速运动案例一 DOCTYPE tml htmllang en head metacharset UTF 8 metacharset UTF 8 head htmllang en

    2026年3月18日
    2
  • lambda表达式用法_使用lambda表达式定义函数

    lambda表达式用法_使用lambda表达式定义函数(一)输入参数在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大于或者等于2时,Lambda表达式左边的一对小括弧中的多个参数质检使用逗号(,)分割。示例1下面创建一个Lambda表达式,它的输入参数的数量为0.该表达式将显示“ThisisaLambdae…

    2026年1月26日
    5
  • 【fiddler】用fiddler实现android手机抓包

    【fiddler】用fiddler实现android手机抓包一 fiddler 的简介 fiddler 是位于客户端和服务器端之间的代理 也是目前最常用的抓包工具之一 它能够记录客户端和服务器之间的所有请求 可以针对特定的请求 分析请求数据 设置断点 调试 web 应用 修改请求的数据 甚至可以修改服务器返回的数据 功能非常强大 是 web 调试的利器 注意 Fiddler 是以代理 web 服务器的形式工作的 它使用默认代理地址 127 0 0 1 端口 8888 也就是说默认监听在安装本机的 127 0 0 1 8888 如果需要抓局域网内其他机器的包

    2026年3月19日
    3
  • 8000—0004显示设备出现问题_错误0x8007005

    8000—0004显示设备出现问题_错误0x8007005关于COM类工厂80070005和8000401a错误分析及解决办法 问题描述:最近做一个web应用程序需要操作Excel文件,在开发环境下程序测试正常,部署到IIS后程序操作Excel文件,IIS报错,错误出现在创建Excel进程的语句,如下:Application myExcelApp= new ApplicationClass(); IIS提示信息如下:检索 COM 类

    2022年8月20日
    10
  • DeepSeek API快速接入微信公众号详细教程

    DeepSeek API快速接入微信公众号详细教程

    2026年3月16日
    2
  • 详解卡尔曼滤波原理[通俗易懂]

    详解卡尔曼滤波原理[通俗易懂]详解卡尔曼滤波原理  在网上看了不少与卡尔曼滤波相关的博客、论文,要么是只谈理论、缺乏感性,或者有感性认识,缺乏理论推导。能兼顾二者的少之又少,直到我看到了国外的一篇博文,真的惊艳到我了,不得不佩服作者这种细致入微的精神,翻译过来跟大家分享一下,

    2022年6月15日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号