Promise串行执行

95 阅读1分钟
    /**
    const pro1 = ()=>{
        console.log('pro1')
    }
    const pro2 = ()=>{
        console.log('pro2')
    }
    const pro3 = ()=>{
        console.log('pro3')
    }
    实现代码的串行执行,得到的输出必须是:
    pro1==>pro2==>pro3
    */
    const chainFunc = function(pros){
        let queue = []
        let fns = fn=>{
            return new Promise(resolve=>{
                setTimeout(()=>{
                    fn()
                    resolve()
                })
            })
        }
        pros.forEach(pro=>{
            queue.push(fns(pro))
        })
        queue.reduce((pre,cur)=>{
            return pre.then(cur)
        },Promise.resolve())
    }
   
    //测试数据
    const pro1 = ()=>{
        console.log('pro1')
    }
    const pro2 = ()=>{
        console.log('pro2')
    }
    const pro3 = ()=>{
        console.log('pro3')
    }
    let pros = [pro1,pro2,pro3]
    chainFunc(pros)//pro1 pro2 pro3