let myArray = ["beans", "soup", "peanuts", "artichokes"]; myArray.reduce((promise, item) => { return promise.then(() => { return itemsPromise(item); }); }, Promise.resolve()).then(() => { console.log("ALL DONE"); }) let itemsPromise = (item) => { console.log("Item: ", item); return new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, 2000); }); }