JSFiddle - React, Tailwind, and code Playground
by anzeo
JavaScript
function ConversionRatesMap(){
var map = {};
this.get = function(from, to){
var promiseRateIsAvailable = $.Deferred();
if(map[from] && map[from][to]) {
return promiseRateIsAvailable.resolve(map[from][to]);
}
this.add(from, to).done(function(rate){
promiseRateIsAvailable.resolve(rate);
});
return promiseRateIsAvailable;
}
this.add = function(from, to){
var promise = $.Deferred();
if(!map[from]){
map[from] = {};
}
// mimic call to the BE
setTimeout(function(){
map[from][to] = 5;
promise.resolve(map[from][to]);
}, 2000);
return promise;
}
}
function CurrencyConverter(){
var ratesMap = new ConversionRatesMap
this.convert = function(amount, from, to){
var promise = $.Deferred(),
rate = ratesMap.get(from, to).done(function(rate){
promise.resolve(amount * rate);
});
return promise;
}
}
// cc.convert(5, 'EUR').to('USD')
var cc = new CurrencyConverter();
cc.convert(5, "EUR", "USD").done(function(convertedValue){
alert(convertedValue);
});