在java中线程有sleep函数可以延迟执行,但是在js中并没有这样的函数。
唯一有的就是setTimeout延迟执行函数,但是这个函数也是有很多坑。

for (var i = 0; i < 6; i++) {setTimeout(function () {console.log(i);}, 1000)
}//结果是6个6

场景:由于js是单线程异步执行的,当调用第三方API接口时,如果对方没有提供批量操作的接口,我们就需要多次请求相同的API,但是在for语句中会同时去访问多个相同请求,会造成并发冲突。
这个时候需要延迟执行请求,避免程序错误。

let dataArray=[];
function apiRequest(val){}
for (var i = 0; i < dataArray.length; i++) {setTimeout(apiRequest(dataArray[i]), 1000); // 意图每秒执行一次,不是累加的
}//error,并发冲突

单纯使用setTimeout函数,最后发现延迟1s后还是一起执行了内部函数,造成冲突。
思路是每个setTimeout函数延迟不同的时间1000 * i。

let dataArray=[];
function apiRequest(val){}
for (var i = 0; i < dataArray.length; i++) {(function (t, func, data) {// 注意这里是形参setTimeout(function () {func(data);}, 1000 * t); // 还是每秒执行一次,不是累加的})(i, apiRequest, dataArray[i]); // 注意这里是实参,这里把要用的参数传进去
}

同时,由于setTimeout函数的作用域不能访问外部函数,需要通过匿名函数传递外部参数进去。

JavaScript:延迟访问和延时执行函数相关推荐

  1. js Function对象扩展与延时执行函数实例代码

    网页特效 function对象扩展与延时执行函数实例代码 function.prototype.delay=function(this1,timeout){ this1=this1||null; ti ...

  2. 延时执行函数:前浪死在沙滩上

    业务场景:有主表.子表两个GridView点击主表的行,会自动读取主表对应的子表数据 但是如果反复点击会导致反复读取,其实反复点击的时候只需要最后一次执行查询,前面的几次点击都是无意义操作 根据这一需 ...

  3. python延时执行函数_一日一技:在 Python 中实现延迟调用

    一日一技:在 Python 中实现延迟调用 收录于话题 #你不知道的 Python 71个 摄影:产品经理 产品经理的生日餐 熟悉 Golang 的同学都知道,Golang 里面有一个关键词叫做def ...

  4. python延时执行函数_python延迟指定时间执行特定任务脚本

    函数功能说明: 指定时间间隔(day,hour,min,second)一个或多个选项,例如,从现在开始延迟 5分钟/1小时,运行一个hello函数. from datetime import date ...

  5. js关于setTimeout实现延时执行函数并进行传参

    传参方式一:setTimeout第一个参数可以是一段JS的代码字符串片段,第二个参数为延迟时间单位ms <script> function ab() { var a=1; var b =1 ...

  6. python延时执行函数_python 限制函数执行时间,自己实现timeout的实例

    如下所示: # coding=utf-8 import signal import time def set_timeout(num, callback): def wrap(func): def h ...

  7. [微信小程序] 当动画(animation)遇上延时执行函数(setTimeout)出现的问题

    小程序中当动画animation遇上setTimeout函数内部使用this.setData函数,通常情况下会出现报错.本文先告诉解决方法,后分析报错原因 1.解决方法: 在 setTimeout() ...

  8. javascript 匿名自执行函数

    有一种匿名函数可以自动执行,这种函数定义如下: (function(){//执行一些语句 })(); 也可以为函数添加参数,语法格式如下: (function(arg_1,arg_2,...arg_n ...

  9. js-延迟执行函数的个人理解

    首先说一下,这里的 延迟执行函数 不是 延时执行函数,别搞混了 延迟执行函数是基于目标函数被执行一定次数后触发的函数. 延迟执行函数的思想有点类似于以下场景: 张三,这个路口经过的第三个人就是我们的目 ...

  10. JS模块化(立即执行函数)

    JavaScript的模块化 //用立即执行函数制造的模块是JS最常用的模块(模块是实现特定功能的一组属性和方法的封装, //可以独立完成一些功能,且有私有成员)之宽放大模式(允许模块所需参数为空,比 ...

最新文章

  1. S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序
  2. PHP支持模板,让ThinkPHP5支持模板主题(参照ThinkPHP3.2)
  3. 2021-09-22
  4. 按单词逆序句子(含标点)
  5. 精通java ee项目案例_精通JavaEE项目案例
  6. 計算機二級-java-03
  7. node.js提供的服务器live-server的使用
  8. poj 3243 Clever Y(Baby-Step Giant-Step)
  9. mybatis_07动态SQL_foreach循环
  10. 服务器网卡无法开启lldp协议,lldp支持-VMware vSphere - 思科华为论坛
  11. 如何搭建一个vue项目(完整步骤)
  12. .Net框架搭建之2、SQL Server MEF依赖注入 MVC Repository框架
  13. 执行DBMS_SQLTUNE优化sql或dbms_stats收集统计信息报错:ORA-20003
  14. 商城模板_商城模板网站html5_微信小程序商城模板
  15. 2020找工作更难了?做好这4方面,找到高薪好工作
  16. 文本数据下的用户画像
  17. CS4398 Cirrus Logic的旗舰级音频解码芯片
  18. 最近的题目总结(树,电话线铺设,我的天)
  19. 步进电机驱动器驱动不了电机的一种情况及解决方案
  20. 文秘专业计算机基础试卷,秘书题库:文秘类专业基础理论课试卷上2

热门文章

  1. Redis 菜鸟教程学习笔记- Redis 命令- Key
  2. Android studio环境变量配置及其作用(JDK与SDK配置)
  3. 怎样用等价类划分设计测试用例
  4. 我的世界java版forge放在哪_我的世界forge怎么装mod(mod安装方法介绍)
  5. 2021-0(C++)输入一个字符串,判断其是否是回文字符串(回文字符串就是正序与反序是相同的字符串)5-27
  6. vscode下载之前版本插件
  7. 国家统计局统计用区划和城乡划分代码
  8. 局域网桌面共享会议该如何实现屏幕共享?
  9. Step7 MicroWin V4.0 SP9在Win10系统中的安装方法
  10. 2022年第三届全国大学生网络安全精英赛