编辑代码

var fn1 = function(a, cb){
    setTimeout(()=>cb(a + 2), 300)
}
var fn2 = function(a, cb){
    setTimeout(()=>cb(a + 3), 200)
}
var fn3 = function(a, cb){
    setTimeout(()=>cb(a * 2), 100)
}
var fnArr = [fn1, fn2, fn3];
run(1, fnArr, function(res){
    console.log(res,'res') // 这里会打印出12。// 12 = (1+2+3)*2
})
function run(initValue, fnArr, call){
    let res = initValue
    function run2(initValue, fnArr, call) {
        let first = fnArr[0]
        let count = 0
        if(first) {
            first(initValue,function(val){
                res = val
                fnArr.shift()
                run2(val,fnArr,call)               
            })        
        }else{
            call(res)
        }
    }
    run2(initValue, fnArr, call) 
}