Created
July 30, 2014 09:21
-
-
Save walling/29c5724d9c08381b75bc to your computer and use it in GitHub Desktop.
node-async-caching-example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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