@@ -47,16 +47,25 @@ var multiCaching = function(caches, options) {
47
47
}
48
48
}
49
49
50
+ function getFromHighestPriorityCachePromise ( key , options ) {
51
+ return new Promise ( function ( resolve , reject ) {
52
+ getFromHighestPriorityCache ( key , options , function ( err , result ) {
53
+ if ( err ) {
54
+ return reject ( err ) ;
55
+ }
56
+ resolve ( result ) ;
57
+ } ) ;
58
+ } ) ;
59
+ }
60
+
50
61
function getFromHighestPriorityCache ( key , options , cb ) {
51
62
if ( typeof options === 'function' ) {
52
63
cb = options ;
53
64
options = { } ;
54
65
}
55
66
56
- var promised = false ;
57
67
if ( ! cb ) {
58
- cb = Promise . defer ( ) ;
59
- promised = true ;
68
+ return getFromHighestPriorityCachePromise ( key , options ) ;
60
69
}
61
70
62
71
var i = 0 ;
@@ -70,10 +79,7 @@ var multiCaching = function(caches, options) {
70
79
71
80
if ( _isCacheableValue ( result ) ) {
72
81
// break out of async loop.
73
- if ( ! promised ) {
74
- return cb ( err , result , i ) ;
75
- }
76
- return cb . resolve ( result ) ;
82
+ return cb ( err , result , i ) ;
77
83
}
78
84
79
85
i += 1 ;
@@ -82,25 +88,26 @@ var multiCaching = function(caches, options) {
82
88
83
89
cache . store . get ( key , options , callback ) ;
84
90
} , function ( err , result ) {
85
- if ( ! promised ) {
86
- return cb ( err , result ) ;
87
- }
88
-
89
- return ( err ) ? cb . reject ( err ) : cb . resolve ( result ) ;
91
+ return cb ( err , result ) ;
90
92
} ) ;
93
+ }
91
94
92
- if ( promised ) {
93
- return cb . promise ;
94
- }
95
+ function setInMultipleCachesPromise ( caches , opts ) {
96
+ return new Promise ( function ( resolve , reject ) {
97
+ setInMultipleCaches ( caches , opts , function ( err , result ) {
98
+ if ( err ) {
99
+ return reject ( err ) ;
100
+ }
101
+ resolve ( result ) ;
102
+ } ) ;
103
+ } ) ;
95
104
}
96
105
97
106
function setInMultipleCaches ( caches , opts , cb ) {
98
107
opts . options = opts . options || { } ;
99
108
100
- var promised = false ;
101
109
if ( ! cb ) {
102
- promised = true ;
103
- cb = Promise . defer ( ) ;
110
+ return setInMultipleCachesPromise ( caches , opts ) ;
104
111
}
105
112
106
113
async . each ( caches , function ( cache , next ) {
@@ -112,16 +119,19 @@ var multiCaching = function(caches, options) {
112
119
next ( ) ;
113
120
}
114
121
} , function ( err , result ) {
115
- if ( promised ) {
116
- return ( err ) ? cb . reject ( err ) : cb . resolve ( result ) ;
117
- } else {
118
- cb ( err , result ) ;
119
- }
122
+ cb ( err , result ) ;
120
123
} ) ;
124
+ }
121
125
122
- if ( promised ) {
123
- return cb . promise ;
124
- }
126
+ function getAndPassUpPromise ( key ) {
127
+ return new Promise ( function ( resolve , reject ) {
128
+ self . getAndPassUp ( key , function ( err , result ) {
129
+ if ( err ) {
130
+ return reject ( err ) ;
131
+ }
132
+ resolve ( result ) ;
133
+ } ) ;
134
+ } ) ;
125
135
}
126
136
127
137
/**
@@ -132,15 +142,13 @@ var multiCaching = function(caches, options) {
132
142
* @param {function } cb
133
143
*/
134
144
self . getAndPassUp = function ( key , cb ) {
135
- var promised = false ;
136
145
if ( ! cb ) {
137
- promised = true ;
138
- cb = Promise . defer ( ) ;
146
+ return getAndPassUpPromise ( key ) ;
139
147
}
140
148
141
149
getFromHighestPriorityCache ( key , function ( err , result , index ) {
142
150
if ( err ) {
143
- return ( ! promised ) ? cb ( err ) : cb . reject ( err ) ;
151
+ return cb ( err ) ;
144
152
}
145
153
146
154
if ( index ) {
@@ -154,14 +162,28 @@ var multiCaching = function(caches, options) {
154
162
} ) ;
155
163
}
156
164
157
- return ( ! promised ) ? cb ( err , result ) : cb . resolve ( result ) ;
165
+ return cb ( err , result ) ;
158
166
} ) ;
159
-
160
- if ( promised ) {
161
- return cb . promise ;
162
- }
163
167
} ;
164
168
169
+ function wrapPromise ( key , promise , options ) {
170
+ return new Promise ( function ( resolve , reject ) {
171
+ self . wrap ( key , function ( cb ) {
172
+ Promise . resolve ( )
173
+ . then ( promise )
174
+ . then ( function ( result ) {
175
+ cb ( null , result ) ;
176
+ } )
177
+ . catch ( cb ) ;
178
+ } , options , function ( err , result ) {
179
+ if ( err ) {
180
+ return reject ( err ) ;
181
+ }
182
+ resolve ( result ) ;
183
+ } ) ;
184
+ } ) ;
185
+ }
186
+
165
187
/**
166
188
* Wraps a function in one or more caches.
167
189
* Has same API as regular caching module.
@@ -192,14 +214,7 @@ var multiCaching = function(caches, options) {
192
214
}
193
215
194
216
if ( ! cb ) {
195
- cb = Promise . defer ( ) ;
196
- var work2 = work ;
197
- work = function ( cb ) {
198
- Promise . resolve ( ) . then ( work2 ) . then ( function ( res ) {
199
- cb ( null , res ) ;
200
- } )
201
- . catch ( cb ) ;
202
- } ;
217
+ return wrapPromise ( key , work , options ) ;
203
218
}
204
219
205
220
var hasKey = callbackFiller . has ( key ) ;
@@ -230,9 +245,6 @@ var multiCaching = function(caches, options) {
230
245
}
231
246
232
247
if ( ! self . _isCacheableValue ( data ) ) {
233
- if ( typeof cb === 'object' ) {
234
- return cb . resolve ( data ) ;
235
- }
236
248
return cb ( ) ;
237
249
}
238
250
@@ -244,10 +256,6 @@ var multiCaching = function(caches, options) {
244
256
} ) ;
245
257
}
246
258
} ) ;
247
-
248
- if ( typeof cb === 'object' ) {
249
- return cb . promise ;
250
- }
251
259
} ;
252
260
253
261
/**
0 commit comments