如何按顺序执行数组中的函数?

2019-04-27 14:57发布

问题:

我想实现这样一个功能:数组里都是函数,每个函数里都有定时器,用来模拟动画过程,按照顺序依次执行这些函数。

let num = 0;

            function a(){
                setTimeout(function(){
                    console.log(1);
                    num++;
                }, 2000);
            };

            function b(){
                setTimeout(function(){
                    console.log(2);
                    num++;
                }, 3000);
            };

            function c(){
                setTimeout(function(){
                    console.log(3);
                    num++;
                }, 1000);
            };

            let arr = [a, b, c];

            arr.forEach((fn, index) => {
                if(num === index){
                    //num 等于下标时,才能执行相应的函数
                    fn();
                }
            });

这样写的话只有 a 可以执行,请高手赐教

回答1:

把 num 拿到定时器外面:

$(function () {
    let num = 0;

    function a() {
        num++;//拿到这里
        setTimeout(function () {
            console.log(1);
        }, 2000);
    };

    function b() {
        num++;
        setTimeout(function () {
            console.log(2);
        }, 3000);
    };

    function c() {
        num++;
        setTimeout(function () {
            console.log(3);
        }, 1000);
    };

    let arr = [a, b, c];

    arr.forEach((fn, index) => {
        if (num === index) {
            //num 等于下标时,才能执行相应的函数
            fn();
        }
    });
});


回答2:

num 放在全局 里面进行重新累加赋值