JSFiddle - React, Tailwind, and code Playground
by jfriend00
JavaScript
let conditions = 0;
function runMatchIteration(data, offset, limit) {
let keys = data.slice(offset);
return keys.reduce((p, val) => {
return p.then(entities => {
// if entities is not yet full
if (entities.length < limit) {
return readEntity(val).then(instance => {
return matchInstance(instance, conditions).then(isMatch => {
if (isMatch) {
entities.push(instance);
}
return entities;
});
});
} else {
return entities;
}
});
}, Promise.resolve([]));
}
function readEntity(val) {
return new Promise(resolve => {
setTimeout(() => {
resolve(val);
}, 50);
});
}
function matchInstance(instance, conditions) {
return new Promise(resolve => {
setTimeout(() => {
// make a 2/3 chance of resolving true
resolve(Math.random() > 0.33);
}, 50);
});
}
let d = [1,2,3,4,5,6,7,8,9];
runMatchIteration(d, 0, 5).then(result => {
console.log(result);
});