使用 setTimeout 实现 setInterval

news/2024/11/28 23:54:44/
  • setTimeout: 倒计时后一次调用
  • setInterval: 间隔时间之间重复调用
// 方法一:递归套娃,套娃结束的时候,只是clearInterval是通过返回的属性设置
const setTimeoutToInterval = (fn, timeout) => {const timer = { flag: true };const interval = () => {if (timer.flag) {fn();setTimeout(interval, timeout);}};setTimeout(interval, timeout);return timer;
};
const fn = () => console.log("------interval------");
const curTimer = setTimeoutToInterval(fn, 1000);
setTimeout(() => {curTimer["flag"] = false;
}, 6000);//   方法二:递归——直接套娃,本质和方法一并无二致
const _setTimeoutToInterval = (fn, timeout, times) => {if (!times) return;setTimeout(() => {fn();_setTimeoutToInterval(fn, timeout, --times);}, timeout);
};//   方法三:递归——具名回调函数 + clearTimeout
const __setTimeoutToInterval = (fn, timeout, times) => {let timer = setTimeout(function aa() {fn();timer--;timer = setTimeout(aa, timeout);if (times <= 0) {clearTimeout(timer);}}, timeout);
};

http://www.ppmy.cn/news/1086699.html

相关文章

OpenPCDet系列 | 8.4 nuScenes数据集数据调用和数据分析

文章目录 1. 对数据集遍历1.1 统计mini版本的nuScenes各模态数据和关键帧的数量1.2 单独遍历lidar模态数据1.3 遍历scene统计数据1.4 遍历sample统计数据1.5 遍历sample_data统计数据1.6 数据集的底层结构2. 对数据集可视化2.1 render_sample和render_sample_data2.2 nusc.rend…

区块链实验室(20) - FISCO控制台连接到指定的节点

在FISCO技术文档中&#xff0c;控制台默认采用config.toml作为配置文件&#xff0c;并指定了连接的节点地址和商品&#xff0c;如下所示。 [network] peers["127.0.0.1:20200", "127.0.0.1:20201"] # The peer list to connect在该案例中&#xff0c;控…

【Mock.js】详解

在前后端同时开发的时候&#xff0c;后端接口数据没有出来时&#xff0c;前端可以使用mock假数据模拟开发。 一、基础语法 1、数据模板定义 属性值 方法 String 1、name|min-max: string 2、name|count: string 1、通过重复 string 生成一个字符串&#xff0c;重复次数大于等…

const用法详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、const用法详解二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能…

Vue项目中使用el-form校验用户输入字段是否符合条件验证-demo

实现效果 实现 <div class"registerWarp"><el-formlabel-position"top"label-width"100px":model"form"ref"ruleFormRef":rules"rulesForm"hide-required-asteriskclass"register-form">&…

常见路由跳转的几种方式

常见的路由跳转有以下四种&#xff1a; 1. <router-link to"跳转路径"> /* 不带参数 */ <router-link :to"{name:home}"> <router-link :to"{path:/home}"> // 更建议用name // router-link链接中&#xff0c;带/ 表示从根…

Python---函数

函数定义&#xff1a; """ def 函数名(传入参数):函数体return 返回值 """ 函数调用&#xff1a; """ 函数名(传入参数) """ 例子&#xff1a; # 不带参 def check():print("欢迎光临\n请进") che…

深入浅出AXI协议(4)——猝发传输

一、前言 在之前的文章中&#xff0c;我们着重介绍了关于AXI4的握手协议它可以使得传输的双方都可以自如地控制传输的速率&#xff0c;我们主要介绍了握手协议出现的3种可能情况。然后对于AXI4交易通信的握手信号的关系做出了介绍&#xff1a;&#xff08;1&#xff09;在AXI4互…