Skip to content

Commit 5bcc45f

Browse files
committed
extracting CallbackFiller class
1 parent eb986dc commit 5bcc45f

File tree

3 files changed

+41
-40
lines changed

3 files changed

+41
-40
lines changed

lib/caching.js

+11-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*jshint maxcomplexity:15*/
22
/*jshint -W072 */
33
var domain = require('domain');
4+
var CallbackFiller = require('./callback_filler');
45

56
var caching = function(args) {
67
args = args || {};
@@ -21,7 +22,7 @@ var caching = function(args) {
2122
// do we handle a cache error the same as a cache miss?
2223
self.ignoreCacheErrors = args.ignoreCacheErrors || false;
2324

24-
self.queues = {};
25+
var callbackFiller = new CallbackFiller();
2526

2627
/**
2728
* Wraps a function in cache. I.e., the first time the function is run,
@@ -43,44 +44,34 @@ var caching = function(args) {
4344
options = undefined;
4445
}
4546

46-
if (self.queues[key]) {
47-
self.queues[key].push({cb: cb, domain: process.domain});
47+
if (callbackFiller.queues[key]) {
48+
callbackFiller.queues[key].push({cb: cb, domain: process.domain});
4849
return;
4950
}
5051

51-
self.queues[key] = [{cb: cb, domain: process.domain}];
52-
53-
function fillCallbacks(err, data) {
54-
var waiting = self.queues[key];
55-
delete self.queues[key];
56-
57-
waiting.forEach(function(task) {
58-
var taskDomain = task.domain || domain.create();
59-
taskDomain.bind(task.cb)(err, data);
60-
});
61-
}
52+
callbackFiller.queues[key] = [{cb: cb, domain: process.domain}];
6253

6354
self.store.get(key, options, function(err, result) {
6455
if (err && (!self.ignoreCacheErrors)) {
65-
fillCallbacks(err);
56+
callbackFiller.fill(key, err);
6657
} else if (result) {
67-
fillCallbacks(null, result);
58+
callbackFiller.fill(key, null, result);
6859
} else {
6960
domain
7061
.create()
7162
.on('error', function(err) {
72-
fillCallbacks(err);
63+
callbackFiller.fill(key, err);
7364
})
7465
.bind(work)(function(err, data) {
7566
if (err) {
76-
fillCallbacks(err);
67+
callbackFiller.fill(key, err);
7768
return;
7869
}
7970
self.store.set(key, data, options, function(err) {
8071
if (err && (!self.ignoreCacheErrors)) {
81-
fillCallbacks(err);
72+
callbackFiller.fill(key, err);
8273
} else {
83-
fillCallbacks(null, data);
74+
callbackFiller.fill(key, null, data);
8475
}
8576
});
8677
});

lib/callback_filler.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var domain = require('domain');
2+
3+
function CallbackFiller() {
4+
this.queues = {};
5+
}
6+
7+
CallbackFiller.prototype.fill = function(key, err, data) {
8+
var self = this;
9+
10+
var waiting = self.queues[key];
11+
delete self.queues[key];
12+
13+
waiting.forEach(function(task) {
14+
var taskDomain = task.domain || domain.create();
15+
taskDomain.bind(task.cb)(err, data);
16+
});
17+
};
18+
19+
module.exports = CallbackFiller;

lib/multi_caching.js

+11-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var async = require('async');
22
var domain = require('domain');
3+
var CallbackFiller = require('./callback_filler');
34

45
/**
56
* Module that lets you specify a hierarchy of caches.
@@ -10,7 +11,7 @@ var multi_caching = function(caches) {
1011
throw new Error('multi_caching requires an array of caches');
1112
}
1213

13-
self.queues = {};
14+
var callbackFiller = new CallbackFiller();
1415

1516
function get_from_highest_priority_cache(key, options, cb) {
1617
if (typeof options === 'function') {
@@ -88,26 +89,16 @@ var multi_caching = function(caches) {
8889
options = undefined;
8990
}
9091

91-
if (self.queues[key]) {
92-
self.queues[key].push({cb: cb, domain: process.domain});
92+
if (callbackFiller.queues[key]) {
93+
callbackFiller.queues[key].push({cb: cb, domain: process.domain});
9394
return;
9495
}
9596

96-
self.queues[key] = [{cb: cb, domain: process.domain}];
97-
98-
function fillCallbacks(err, data) {
99-
var waiting = self.queues[key];
100-
delete self.queues[key];
101-
102-
waiting.forEach(function(task) {
103-
var taskDomain = task.domain || domain.create();
104-
taskDomain.bind(task.cb)(err, data);
105-
});
106-
}
97+
callbackFiller.queues[key] = [{cb: cb, domain: process.domain}];
10798

10899
get_from_highest_priority_cache(key, function(err, result, index) {
109100
if (err) {
110-
return fillCallbacks(err);
101+
return callbackFiller.fill(key, err);
111102
} else if (result) {
112103
var caches_to_update = caches.slice(0, index);
113104
var opts = {
@@ -121,17 +112,17 @@ var multi_caching = function(caches) {
121112
}
122113

123114
set_in_multiple_caches(caches_to_update, opts, function(err) {
124-
fillCallbacks(err, result);
115+
callbackFiller.fill(key, err, result);
125116
});
126117
} else {
127118
domain
128119
.create()
129120
.on('error', function(err) {
130-
fillCallbacks(err);
121+
callbackFiller.fill(key, err);
131122
})
132123
.bind(work)(function(err, data) {
133124
if (err) {
134-
fillCallbacks(err);
125+
callbackFiller.fill(key, err);
135126
return;
136127
}
137128
var opts = {
@@ -145,9 +136,9 @@ var multi_caching = function(caches) {
145136
}
146137
set_in_multiple_caches(caches, opts, function(err) {
147138
if (err) {
148-
fillCallbacks(err);
139+
callbackFiller.fill(key, err);
149140
} else {
150-
fillCallbacks(null, data);
141+
callbackFiller.fill(key, null, data);
151142
}
152143
});
153144
});

0 commit comments

Comments
 (0)