实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”

  1. function func1(callback) {
  2. setTimeout(function () {
  3. console.log("func1");
  4. callback && callback()
  5. }, Math.random() * 100)
  6. }
  7.  
  8. function func2(callback) {
  9. setTimeout(function () {
  10. console.log("func2");
  11. callback && callback()
  12. }, Math.random() * 100)
  13. }
  14. function func3(callback) {
  15. setTimeout(function () {
  16. console.log("func3");
  17. callback && callback()
  18. }, Math.random() * 100)
  19. }
  20.  
  21. asyncAll([func1,func2,func3]);
  22.  
  23. //输出(注:输出的func1,func2,func3为无序);
  24. func2
  25. func1
  26. func3
  27. end

思路:声明一个全局变量count=arr.length,用来计数,每执行一次回调参数count--;直到count=0;代表所有的参数执行完毕,然后输出end。代码如下

  1. function asyncAll(arr) {
  2. var count = arr.length;
  3.  
  4. function fn() {
  5.  
  6. count--;
  7. if (count === 0) {
  8. console.log("end")
  9. }
  10. }
  11.  
  12. arr.forEach(function (ele) {
  13. ele(fn);
  14. });
  15. }

若要按指定顺序执行,例如func1,func2,func3的顺序执行。

  1. function asyncAll([func1,func2,func3]){
  2. func1(function(){
  3. func2(function(){
  4. func3();
  5. })
  6. });
  7. }

异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”的更多相关文章

  1. C:函数:功能:实现字符数组中所有字母的倒序存放并输出

    前两天小测碰到一道题,建立一个函数,功能:实现字符数组中所有字母的倒序存放并输出,一开始觉得简单跟数字数组差不多,运行一下发现很多格式错误,这些是不必要的错误,现在就来说下,先说一下代码思路:定义一个 ...

  2. 求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { pub ...

  3. 数组:获取数组中最后一个数据end()函数

    今天来学习一下end()函数 1.案例:直接获取数组中最后一个数据 代码部分 结果: 2.案例:从url中获取最后一个数据 代码部分: 结果: 总结: 1.有时候我们需要去获取数据库中,id最大的那个 ...

  4. 让一个数组中存在N多个函数。让每个函数执行的 时候自动加1

    function test(){ var arr = [ ]; for (var i = 0; i < 10; i++) { (function(i){ arr[i] = function(){ ...

  5. 调用notify()后,当前线程执行完synchronized块中的所有代码才会释放锁

    package com.pinnet.test; public class Demo { public static void main(String[] args) { Demo demo = ne ...

  6. C#反射调用外部Dll,执行其中异步函数并取返回值

    using System.Reflection; 1.载入Dll Assembly asm=Assembly.LoadFile(FullPath);//FullPath 为Dll所在位置的全路径. 2 ...

  7. react 在 componentWillMount() 中调用异步函数时,componentWillMount() finishes after render()

    刚开始使用 react,很多属性.方法不是很熟.在此记录下我所遇到的问题及解决方法. 我在 componentWillMount() 中调用了一个异步函数,在返回结果中调用 this.setState ...

  8. php数组函数有哪些操作?php数组函数的应用

    PHP 的数组是一种很强大的数据类型,与此同时 PHP 内置了一系列与数组相关的函数可以很轻易的实现日常开发的功能.但是我发现好像很多小伙伴都忽略了内置函数的作用(比如我自己就编写过一些有关数组操作的 ...

  9. C++11 中的 Defaulted 和 Deleted 函数

    http://blog.jobbole.com/103669/ C++11 中的 Defaulted 和 Deleted 函数 2016/07/21 · C/C++, 开发 · C++ 分享到:3   ...

随机推荐

  1. U3D 打包时找不到tag的问题

    在公司改完一个功能,把工程拷回家打开后,编辑器模式下运行正常,打包PC平台和安卓平台时都报错,找不到chatContent这个tag,察看了下下拉列表中明明有这个tag,并且勾选上了,但是点击add ...

  2. setTimeout和setInterval从入门到精通

    我们在日常web前端开发中,经常需要用到定时器方法. 前端中的定时器方法是浏览器提供的,并不是ECMAScript规范中的.是window对象的方法. 浏览器中的定时器有两种, 一种是每间隔一定时间执 ...

  3. StringIO和BytesIO

    1. StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. StringIO顾名思义就是在内存中读写str. 要把str写入StringIO,我们需要先创建一个StringIO,然后 ...

  4. PRINCE2风险模块

    我们前几个节学习了PRINCE2七大主题的商业论证.组织.质量和计划,今天我们开展对于风险模块的讲解. 风险:目的是识别.评估和控制不确定性,从而提高项目的成功率.PRINCE2对风险登记册进行了详细 ...

  5. UVa11427 Expect the Expected

    数学期望 概率递推 每一天的概率都是独立且相同的.可以先推出每天打i盘赢j盘的概率f[i][j] f[i][j]=f[i-1][j]*(1-p) + f[i-1][j-1]*p 输 赢 设此人打一天胜 ...

  6. ZKW线段树

    简介 zkw线段树虽然是线段树的另一种写法,但是本质上已经和普通的递归版线段树不一样了,是一种介于树状数组和线段树中间的存在,一些功能上的实现比树状数组多,而且比线段树好写且常数小. 普通线段树采用从 ...

  7. Apache的dbutils的架构图

  8. 判断iframe加载完成

    一.js判断 var parFrame = document.getElementById("oIframe"); if(parFrame.attachEvent){ parFra ...

  9. Web Service简要概念,学习记录!

    Web Service平台需要一套协议来实现分布式应用程序的创建.任何平台都有它的数据表示方法和类型系统.要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台.编程语 ...

  10. MyEclipse10--的使用经验

    MyEclipse10--的使用经验总结 ------------------ 1.MyEclipse中的验证validation----->>用MyEclipse做ExtJs项目研发的时 ...