JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.2/q.min.js"></script>

JavaScript

var results = [1, 2, 3, 4, 5];
    
    function delayedCall(i, r, idx){
      var deferred = Q.defer();
      setTimeout(function(){
        console.log('item', i, 'result', r, 'index', idx);
        deferred.resolve(true); 
      }, 1000 * idx);
      return deferred.promise;
    }

    function workCollection(arr) {
      return arr.reduce(function(promise, item, index) {
        return promise.then(function(result) {
          return delayedCall(item, result, index);
        });
      }, Q.resolve(true));
    }

    Q.resolve().then(function(){
      console.log('start');
    }).then(function(){
      return workCollection(results)
    }).then(function(){
      console.log('done');
    }).catch(function(err){
      console.log(err);
    });