Skip to content

Commit a4e2eb5

Browse files
committed
Refactor the whole promise thing
1 parent 40ed0be commit a4e2eb5

File tree

3 files changed

+77
-71
lines changed

3 files changed

+77
-71
lines changed

lib/caching.js

+19-15
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,24 @@ var caching = function(args) {
4242
};
4343
}
4444

45+
function wrapPromise(key, promise, options) {
46+
return new Promise(function(resolve, reject) {
47+
self.wrap(key, function(cb) {
48+
Promise.resolve()
49+
.then(promise)
50+
.then(function(result) {
51+
cb(null, result);
52+
})
53+
.catch(cb);
54+
}, options, function(err, result) {
55+
if (err) {
56+
return reject(err);
57+
}
58+
resolve(result);
59+
});
60+
});
61+
}
62+
4563
/**
4664
* Wraps a function in cache. I.e., the first time the function is run,
4765
* its results are stored in cache so subsequent calls retrieve from cache
@@ -70,14 +88,7 @@ var caching = function(args) {
7088
}
7189

7290
if (!cb) {
73-
cb = Promise.defer();
74-
var work2 = work;
75-
work = function(cb) {
76-
Promise.resolve().then(work2).then(function(res) {
77-
cb(null, res);
78-
})
79-
.catch(cb);
80-
};
91+
return wrapPromise(key, work, options);
8192
}
8293

8394
var hasKey = callbackFiller.has(key);
@@ -102,9 +113,6 @@ var caching = function(args) {
102113
}
103114

104115
if (!self._isCacheableValue(data)) {
105-
if (typeof cb === 'object') {
106-
return cb.resolve(data);
107-
}
108116
return cb();
109117
}
110118

@@ -118,10 +126,6 @@ var caching = function(args) {
118126
});
119127
}
120128
});
121-
122-
if (typeof cb === 'object') {
123-
return cb.promise;
124-
}
125129
};
126130

127131
/**

lib/callback_filler.js

-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@ CallbackFiller.prototype.fill = function(key, err, data) {
1212

1313
waiting.forEach(function(task) {
1414
var taskDomain = task.domain || domain.create();
15-
if (typeof task.cb === 'object') {
16-
if (err) {
17-
return taskDomain.bind(task.cb.reject)(err);
18-
}
19-
return taskDomain.bind(task.cb.resolve)(data);
20-
}
2115
taskDomain.bind(task.cb)(err, data);
2216
});
2317
};

lib/multi_caching.js

+58-50
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,25 @@ var multiCaching = function(caches, options) {
4747
}
4848
}
4949

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+
5061
function getFromHighestPriorityCache(key, options, cb) {
5162
if (typeof options === 'function') {
5263
cb = options;
5364
options = {};
5465
}
5566

56-
var promised = false;
5767
if (!cb) {
58-
cb = Promise.defer();
59-
promised = true;
68+
return getFromHighestPriorityCachePromise(key, options);
6069
}
6170

6271
var i = 0;
@@ -70,10 +79,7 @@ var multiCaching = function(caches, options) {
7079

7180
if (_isCacheableValue(result)) {
7281
// 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);
7783
}
7884

7985
i += 1;
@@ -82,25 +88,26 @@ var multiCaching = function(caches, options) {
8288

8389
cache.store.get(key, options, callback);
8490
}, 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);
9092
});
93+
}
9194

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+
});
95104
}
96105

97106
function setInMultipleCaches(caches, opts, cb) {
98107
opts.options = opts.options || {};
99108

100-
var promised = false;
101109
if (!cb) {
102-
promised = true;
103-
cb = Promise.defer();
110+
return setInMultipleCachesPromise(caches, opts);
104111
}
105112

106113
async.each(caches, function(cache, next) {
@@ -112,16 +119,19 @@ var multiCaching = function(caches, options) {
112119
next();
113120
}
114121
}, 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);
120123
});
124+
}
121125

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+
});
125135
}
126136

127137
/**
@@ -132,15 +142,13 @@ var multiCaching = function(caches, options) {
132142
* @param {function} cb
133143
*/
134144
self.getAndPassUp = function(key, cb) {
135-
var promised = false;
136145
if (!cb) {
137-
promised = true;
138-
cb = Promise.defer();
146+
return getAndPassUpPromise(key);
139147
}
140148

141149
getFromHighestPriorityCache(key, function(err, result, index) {
142150
if (err) {
143-
return (!promised) ? cb(err) : cb.reject(err);
151+
return cb(err);
144152
}
145153

146154
if (index) {
@@ -154,14 +162,28 @@ var multiCaching = function(caches, options) {
154162
});
155163
}
156164

157-
return (!promised) ? cb(err, result) : cb.resolve(result);
165+
return cb(err, result);
158166
});
159-
160-
if (promised) {
161-
return cb.promise;
162-
}
163167
};
164168

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+
165187
/**
166188
* Wraps a function in one or more caches.
167189
* Has same API as regular caching module.
@@ -192,14 +214,7 @@ var multiCaching = function(caches, options) {
192214
}
193215

194216
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);
203218
}
204219

205220
var hasKey = callbackFiller.has(key);
@@ -230,9 +245,6 @@ var multiCaching = function(caches, options) {
230245
}
231246

232247
if (!self._isCacheableValue(data)) {
233-
if (typeof cb === 'object') {
234-
return cb.resolve(data);
235-
}
236248
return cb();
237249
}
238250

@@ -244,10 +256,6 @@ var multiCaching = function(caches, options) {
244256
});
245257
}
246258
});
247-
248-
if (typeof cb === 'object') {
249-
return cb.promise;
250-
}
251259
};
252260

253261
/**

0 commit comments

Comments
 (0)