异步控制---实现函数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();                     
        })                               
    });                                  
}                                        

 

posted @ 2016-10-09 10:08  超人会飞555  阅读(843)  评论(0编辑  收藏  举报