var input = [{ 'name': 'event1', 'time': 1000 }, { 'name': 'event2', 'time': 2000 }, { 'name': 'event3', 'time': 3000 }]; var i = 0; var inputLength = input.length; function iterate() { if (i < inputLength) { var currentElement = input[i]; console.log(`${currentElement.name} Started.`); setTimeout( function () { console.log(`${currentElement.name} Ended.`); iterate(); }, currentElement.time); } i++; } iterate();