function printRed() { console.log('red') } function printGreen() { console.log('green') } function printYellow() { console.log('yellow') } function lightsOn(fn, delay) { return new Promise((resolve, reject) => { setTimeout(() => { fn() resolve() }, delay) }) } function start() { Promise.resolve() .then(() => lightsOn(printRed, 2000)) .then(() => lightsOn(printGreen, 3000)) .then(() => lightsOn(printYellow, 1000)) .then(() => start()) } start()