var cache = {}; function getArticleWithCache ( id, callback ) { if ( !cache[id] ) { callback(cache[id]); } else { getArticle(id, function( a ){ cache[id] = a; callback(a); }); } } function backgroundLoad ( ids, callback ) { var i = 0; function l ( ) { if ( i < ids.length ) { getArticleWithCache(ids[i++], function( a ){ backgroundLoad(a.children, l); }); } else { callback(); } } l(); }