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() {
return fn(item).then(function(data) {
results.push(data);
return results;
});
});
}, Promise.resolve());
}
var arr = [0, 1,2];
function factory(idx) {
// create the promise this way gives you automatic throw-safety
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 to factory");
break;
}
});
}
processArray(arr, factory).then(function(result) {
log(result);
}, function(reason) {
log(reason);
});