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