function red() { console.log('red'); } function green() { console.log('green'); } function yellow() { console.log('yellow'); } let light = (timer, fn) => new Promise((resolve, reject) => { setTimeout(() => { fn(); resolve(); }, timer); }); let start = () => { light(3000, red).then(() => { return light(1000, green); }).then(() => { return light(2000, yellow); }).then(() =>{ start(); }) } start();