Add caching

This commit is contained in:
Ace Nassri 2018-06-25 13:16:40 -07:00
parent 7063092393
commit 296841756d

View file

@ -28,26 +28,32 @@ const shopProto = grpc.load(PROTO_PATH).hipstershop;
* Helper function that gets currency data from an XML webpage
* Uses public data from European Central Bank
*/
let _data;
function _getCurrencyData (callback) {
request(DATA_URL, (err, res) => {
if (err) {
throw new Error(`Error getting data: ${err}`);
}
const body = res.body.split('\n').slice(7, -2).join('\n');
xml2js.parseString(body, (err, resJs) => {
if (!_data) {
request(DATA_URL, (err, res) => {
if (err) {
throw new Error(`Error parsing HTML: ${err}`);
throw new Error(`Error getting data: ${err}`);
}
const array = resJs['Cube']['Cube'].map(x => x['$']);
const results = array.reduce((acc, x) => {
acc[x['currency']] = x['rate'];
return acc;
}, { 'EUR': '1.0' });
callback(results);
const body = res.body.split('\n').slice(7, -2).join('\n');
xml2js.parseString(body, (err, resJs) => {
if (err) {
throw new Error(`Error parsing HTML: ${err}`);
}
const array = resJs['Cube']['Cube'].map(x => x['$']);
const results = array.reduce((acc, x) => {
acc[x['currency']] = x['rate'];
return acc;
}, { 'EUR': '1.0' });
_data = results;
callback(_data);
});
});
});
} else {
callback(_data);
}
}
/**