Skip to content

Commit 3427e4c

Browse files
committed
Merge branch 'feature/nested-cache-fetch-fix' into develop
2 parents 332f73c + 20092c3 commit 3427e4c

File tree

4 files changed

+56
-4
lines changed

4 files changed

+56
-4
lines changed

lib/caching.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,13 @@ var caching = function(args) {
5050
self.queues[key] = [{cb: cb, domain: process.domain}];
5151

5252
function fillCallbacks(err, data) {
53-
self.queues[key].forEach(function(task) {
53+
var waiting = self.queues[key];
54+
delete self.queues[key];
55+
56+
waiting.forEach(function(task) {
5457
var taskDomain = task.domain || domain.create();
5558
taskDomain.bind(task.cb)(err, data);
5659
});
57-
delete self.queues[key];
5860
}
5961

6062
self.store.get(key, function(err, result) {

lib/multi_caching.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,13 @@ var multi_caching = function(caches) {
7878
self.queues[key] = [{cb: cb, domain: process.domain}];
7979

8080
function fillCallbacks(err, data) {
81-
self.queues[key].forEach(function(task) {
81+
var waiting = self.queues[key];
82+
delete self.queues[key];
83+
84+
waiting.forEach(function(task) {
8285
var taskDomain = task.domain || domain.create();
8386
taskDomain.bind(task.cb)(err, data);
8487
});
85-
delete self.queues[key];
8688
}
8789

8890
get_from_highest_priority_cache(key, function(err, result, index) {

test/caching.unit.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,30 @@ describe("caching", function() {
327327
});
328328
});
329329

330+
it("lets us make nested calls", function(done) {
331+
function get_cached_widget(name, cb) {
332+
cache.wrap(key, function(cache_cb) {
333+
methods.get_widget(name, cache_cb);
334+
}, cb);
335+
}
336+
337+
get_cached_widget(name, function(err, widget) {
338+
check_err(err);
339+
assert.equal(widget.name, name);
340+
341+
get_cached_widget(name, function(err, widget) {
342+
check_err(err);
343+
assert.equal(widget.name, name);
344+
345+
get_cached_widget(name, function(err, widget) {
346+
check_err(err);
347+
assert.equal(widget.name, name);
348+
done();
349+
});
350+
});
351+
});
352+
});
353+
330354
it("expires cached result after ttl seconds", function(done) {
331355
cache.wrap(key, function(cb) {
332356
methods.get_widget(name, cb);

test/multi_caching.unit.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,30 @@ describe("multi_caching", function() {
519519
});
520520
});
521521
});
522+
523+
it("lets us make nested calls", function(done) {
524+
function get_cached_widget(name, cb) {
525+
multi_cache.wrap(key, function(cache_cb) {
526+
methods.get_widget(name, cache_cb);
527+
}, cb);
528+
}
529+
530+
get_cached_widget(name, function(err, widget) {
531+
check_err(err);
532+
assert.equal(widget.name, name);
533+
534+
get_cached_widget(name, function(err, widget) {
535+
check_err(err);
536+
assert.equal(widget.name, name);
537+
538+
get_cached_widget(name, function(err, widget) {
539+
check_err(err);
540+
assert.equal(widget.name, name);
541+
done();
542+
});
543+
});
544+
});
545+
});
522546
});
523547

524548
context("error handling", function() {

0 commit comments

Comments
 (0)