JSFiddle - React, Tailwind, and code Playground

by jfriend00

HTML

<script src="http://files.the-friend-family.com/log.js"></script>

JavaScript

function processArray(array, fn) {
   var results = [];
   return array.reduce(function(p, item) {
       return p.then(function(data) {
           return fn(item).then(function(data) {
               results.push(data);
               return results;
           });
       });
   }, Promise.resolve());
}

var arr = [0,1,2,3];

function factory(idx) {
    
    return new Promise(function(resolve, reject) {
        // delayResolve it just here to make this actually be async for testing
        function delayResolve(data) {
            setTimeout(function() {
                resolve(data);
            }, 500);
        }
        
        switch (idx) {
            case 0:
                delayResolve("one");
                break;
            case 1:
                delayResolve("two");
                break;
            case 2:
                delayResolve("three");
                break;
            default:
                reject("invalid arg " + idx + " to factory");
                break;
        }
            
    });
}

processArray(arr, factory).then(function(result) {
    log(result);
}, function(reason) {
    log(reason);
});