const arr = [1, 2, 3, 4];
let promise = val => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(val);
resolve();
}, 1000)
})
};
arr.reduce((p, val) => {
return p.then(() => {
return promise(val);
});
}, Promise.resolve());