Skip to content

Instantly share code, notes, and snippets.

@walling
Created July 30, 2014 09:21
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 walling/29c5724d9c08381b75bc to your computer and use it in GitHub Desktop.
Save walling/29c5724d9c08381b75bc to your computer and use it in GitHub Desktop.
node-async-caching-example
var common = require('common'); // npm install --save common
/**
* Super nice funktion som laver fetcher noget data asynkront.
*/
function loadThings(id, callback) {
// ...
}
var cache = {}; // Cache hvert objekt givet et id.
/**
* Funktion som henter ting fra cachen. Hvis objektet ikke findes i cache, så
* fetches det via en "future". En future er en type promise, som giver
* mulighed for at bundle requests. Du kan gette en future alt det du vil og
* den svarer, når der er blevet puttet noget i den. Når der er blevet puttet
* noget i den, så bliver den låst, så den altid svarer dette for al fremtid.
*
* Hvis du bruger common.future() (der er andre implementationer), så håndterer
* den to argumenter (f.eks.: error, value). Det skal din funktion følge.
*/
function loadThingsCached(id, callback) {
var cachedObject = cache[id]; // Hent cachet objekt future
// Hvis der ikke er cachet et objekt, så opret den og begynd at loade den
// asynkront.
if (!cachedObject) {
// Opret ny "future" og gem den i cachen.
cachedObject = cache[id] = common.future();
// Start at loade ting asynkront og "put" det i futuren, når det er klart.
loadThings(id, cachedObject.put);
}
// Uanset om vi det cachede objekt er en ny eller gammel future, så kan vi
// "gette" den for at hente indholdet ud. Hvis den allerede er klar, så vil
// callback blive kaldt med det samme. Hvis ikke, så bliver callback kaldt,
// når den er klar.
cachedObject.get(callback);
}
// Læs mere om common-modulet her: https://github.com/gett/common
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment