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')
})
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)
}