Skip to content

Instantly share code, notes, and snippets.

@sapegin
Created March 29, 2012 08:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sapegin/2235116 to your computer and use it in GitHub Desktop.
Save sapegin/2235116 to your computer and use it in GitHub Desktop.
Caching Ajax requests with $.Deferred
var counters = {
promises: {},
fetch: function(service, url) {
if (!counters.promises[service]) counters.promises[service] = {};
var servicePromises = counters.promises[service];
if (servicePromises[url]) {
return servicePromises[url];
}
else {
var options = services[service],
deferred = $.Deferred(),
jsonUrl = options.counterUrl && options.counterUrl.replace('{PAGE_URL}', url);
if (typeof options.counter === 'function') {
options.counter(jsonUrl, deferred);
}
else if (options.counterUrl) {
$.getJSON(jsonUrl)
.done(function(data) {
try {
var number = data;
if (typeof options.convertNumber === 'function') {
number = options.convertNumber(data);
}
deferred.resolve(number);
}
catch (e) {
throw e;
deferred.reject(e);
}
});
}
servicePromises[url] = deferred;
return deferred.promise();
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment