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);
});