zoukankan      html  css  js  c++  java
  • 异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”

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

    function func1(callback) {
            setTimeout(function () {
                console.log("func1");
                callback && callback()
            }, Math.random() * 100)
        }
    
        function func2(callback) {
            setTimeout(function () {
                console.log("func2");
                callback && callback()
            }, Math.random() * 100)
        }
        function func3(callback) {
            setTimeout(function () {
                console.log("func3");
                callback && callback()
            }, Math.random() * 100)
        }
    
    asyncAll([func1,func2,func3]);
    
    //输出(注:输出的func1,func2,func3为无序);
    func2
    func1
    func3
    end

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

    function asyncAll(arr) {
            var count = arr.length;
    
            function fn() {
    
                count--;
                if (count === 0) {
                    console.log("end")
                }
            }
    
            arr.forEach(function (ele) {
                ele(fn);
            });
        }

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

    function asyncAll([func1,func2,func3]){  
        func1(function(){                    
            func2(function(){                
                func3();                     
            })                               
        });                                  
    }                                        
  • 相关阅读:
    【必备】史上最全的浏览器 CSS & JS Hack 手册(转)
    iScroll4.2.5中的无法滑动或点击的解决方案(转)
    无障碍网页设计(WCAG2.0)
    大小端
    TCP报文结构
    A*
    shell中uniq与sort -u 两种去重的对别
    login流程
    类模板成员函数
    game 角色相关记录
  • 原文地址:https://www.cnblogs.com/hxc555/p/5941102.html
Copyright © 2011-2022 走看看