1
1
var async = require ( 'async' ) ;
2
2
var domain = require ( 'domain' ) ;
3
+ var CallbackFiller = require ( './callback_filler' ) ;
3
4
4
5
/**
5
6
* Module that lets you specify a hierarchy of caches.
@@ -10,7 +11,7 @@ var multi_caching = function(caches) {
10
11
throw new Error ( 'multi_caching requires an array of caches' ) ;
11
12
}
12
13
13
- self . queues = { } ;
14
+ var callbackFiller = new CallbackFiller ( ) ;
14
15
15
16
function get_from_highest_priority_cache ( key , options , cb ) {
16
17
if ( typeof options === 'function' ) {
@@ -88,26 +89,16 @@ var multi_caching = function(caches) {
88
89
options = undefined ;
89
90
}
90
91
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 } ) ;
93
94
return ;
94
95
}
95
96
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 } ] ;
107
98
108
99
get_from_highest_priority_cache ( key , function ( err , result , index ) {
109
100
if ( err ) {
110
- return fillCallbacks ( err ) ;
101
+ return callbackFiller . fill ( key , err ) ;
111
102
} else if ( result ) {
112
103
var caches_to_update = caches . slice ( 0 , index ) ;
113
104
var opts = {
@@ -121,17 +112,17 @@ var multi_caching = function(caches) {
121
112
}
122
113
123
114
set_in_multiple_caches ( caches_to_update , opts , function ( err ) {
124
- fillCallbacks ( err , result ) ;
115
+ callbackFiller . fill ( key , err , result ) ;
125
116
} ) ;
126
117
} else {
127
118
domain
128
119
. create ( )
129
120
. on ( 'error' , function ( err ) {
130
- fillCallbacks ( err ) ;
121
+ callbackFiller . fill ( key , err ) ;
131
122
} )
132
123
. bind ( work ) ( function ( err , data ) {
133
124
if ( err ) {
134
- fillCallbacks ( err ) ;
125
+ callbackFiller . fill ( key , err ) ;
135
126
return ;
136
127
}
137
128
var opts = {
@@ -145,9 +136,9 @@ var multi_caching = function(caches) {
145
136
}
146
137
set_in_multiple_caches ( caches , opts , function ( err ) {
147
138
if ( err ) {
148
- fillCallbacks ( err ) ;
139
+ callbackFiller . fill ( key , err ) ;
149
140
} else {
150
- fillCallbacks ( null , data ) ;
141
+ callbackFiller . fill ( key , null , data ) ;
151
142
}
152
143
} ) ;
153
144
} ) ;
0 commit comments