JSFiddle - React, Tailwind, and code Playground
by divyanshu013
JavaScript
const getApplicationProtectionStats = (datacenterUrl, applicationType)=> new Promise((resolve) => {
setTimeout(() => {
resolve({
protectedApps: Math.floor(Math.random() * 100),
unprotectedApps: Math.floor(Math.random() * 100)
});
}, 1000);
});
// getApplicationProtectionStats('https://www.olive.com/stat', 'vmware').then(console.log)
const applicationTypes = [
'vmware',
'mssql',
'ahv'
];
const datacenters = [
{name: 'olive', url: 'https://www.olive.com/stat'},
{name: 'comet', url: 'https://www.comet.com/stat'},
{name: 'blah', url: 'https://www.blah.com/stat'}
];
function getDataForDatacenter(datacenter, applicationTypes) {
let result = applicationTypes.map((item)=>{
return getApplicationProtectionStats(datacenter.url, item);
});
return Promise.all(result).then((res)=>{
let protectedSum = 0, unprotectedSum = 0;
res.map((item)=>{
protectedSum += item.protectedApps;
unprotectedSum += item.unprotectedApps;
});
return {'protectedApps': protectedSum, 'unprotectedApps': unprotectedSum};
})
}
const allValuesPromise = datacenters.map(center => getDataForDatacenter(center, applicationTypes));
Promise.all(allValuesPromise).then(data => {
const result = data.reduce((resultObject, currentData, index) => ({
...resultObject,
[datacenters[index].name]: currentData
}), {});
console.log('✅✅✅✅✅')
console.log(result) // FINAL ANSWER
})
/* getDataForDatacenter(datacenters[0], applicationTypes).then(console.log); */
// Expected output
// {
// olive: {
// protectedApps: <sum of protected apps counts for each application type in olive>,
// unprotectedApps: <sum of unprotected apps counts for each application type in olive>
// },
// comet: {...},
// blah: {...}
// }