diff --git a/lib/caching.js b/lib/caching.js index 490de42..c6e40a5 100644 --- a/lib/caching.js +++ b/lib/caching.js @@ -50,11 +50,13 @@ var caching = function(args) { self.queues[key] = [{cb: cb, domain: process.domain}]; function fillCallbacks(err, data) { - self.queues[key].forEach(function(task) { + var waiting = self.queues[key]; + delete self.queues[key]; + + waiting.forEach(function(task) { var taskDomain = task.domain || domain.create(); taskDomain.bind(task.cb)(err, data); }); - delete self.queues[key]; } self.store.get(key, function(err, result) { diff --git a/lib/multi_caching.js b/lib/multi_caching.js index 2719a19..0bf98de 100644 --- a/lib/multi_caching.js +++ b/lib/multi_caching.js @@ -78,11 +78,13 @@ var multi_caching = function(caches) { self.queues[key] = [{cb: cb, domain: process.domain}]; function fillCallbacks(err, data) { - self.queues[key].forEach(function(task) { + var waiting = self.queues[key]; + delete self.queues[key]; + + waiting.forEach(function(task) { var taskDomain = task.domain || domain.create(); taskDomain.bind(task.cb)(err, data); }); - delete self.queues[key]; } get_from_highest_priority_cache(key, function(err, result, index) { diff --git a/test/caching.unit.js b/test/caching.unit.js index 7180843..b627474 100644 --- a/test/caching.unit.js +++ b/test/caching.unit.js @@ -327,6 +327,30 @@ describe("caching", function() { }); }); + it("lets us make nested calls", function(done) { + function get_cached_widget(name, cb) { + cache.wrap(key, function(cache_cb) { + methods.get_widget(name, cache_cb); + }, cb); + } + + get_cached_widget(name, function(err, widget) { + check_err(err); + assert.equal(widget.name, name); + + get_cached_widget(name, function(err, widget) { + check_err(err); + assert.equal(widget.name, name); + + get_cached_widget(name, function(err, widget) { + check_err(err); + assert.equal(widget.name, name); + done(); + }); + }); + }); + }); + it("expires cached result after ttl seconds", function(done) { cache.wrap(key, function(cb) { methods.get_widget(name, cb); diff --git a/test/multi_caching.unit.js b/test/multi_caching.unit.js index 5f93b66..52b7cb1 100644 --- a/test/multi_caching.unit.js +++ b/test/multi_caching.unit.js @@ -519,6 +519,30 @@ describe("multi_caching", function() { }); }); }); + + it("lets us make nested calls", function(done) { + function get_cached_widget(name, cb) { + multi_cache.wrap(key, function(cache_cb) { + methods.get_widget(name, cache_cb); + }, cb); + } + + get_cached_widget(name, function(err, widget) { + check_err(err); + assert.equal(widget.name, name); + + get_cached_widget(name, function(err, widget) { + check_err(err); + assert.equal(widget.name, name); + + get_cached_widget(name, function(err, widget) { + check_err(err); + assert.equal(widget.name, name); + done(); + }); + }); + }); + }); }); context("error handling", function() {