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();                     
            })                               
        });                                  
    }                                        
  • 相关阅读:
    ADO.NET 3.5高级编程:应用LINQ&Entity Framework
    C#高级编程(第8版)
    ASP.NET MVC 4 Web编程
    Version of SQLCE in WP8
    字符圆角尖角实现对话框
    数字跳动放大
    jquery框架和mvvm框架的类名操作性对比
    按钮也是一门大学问
    图片轮播
    滑动显示大图升级版
  • 原文地址:https://www.cnblogs.com/hxc555/p/5941102.html
Copyright © 2011-2022 走看看