var asyn = function(arr, cb) {
arr.reduce((p, func) => p.then(func), Promise.resolve()).then(cb);
};
var funArry = [];
for(var i=0;i<5;i++){
var n = i;
var fun = function(n) {
console.log(n);
return new Promise(function(resolve) {
setTimeout(function() {
console.log('func'+n);
resolve();
}, 5000);
});
};
funArry.push(fun);
}
console.log(funArry);
asyn(funArry, function() {
console.log('all things gets done');
});
<div id='box'></div>