Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit c9c4636

Browse files
committed
chore($q): simplify the promises resolution code
Simplify the promises resolution code Remove commented code
1 parent 1fbbb01 commit c9c4636

File tree

2 files changed

+36
-50
lines changed

2 files changed

+36
-50
lines changed

lib/promises-aplus/promises-aplus-test-adapter.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ var isObject = function isObject(value){return value != null && typeof value ===
33

44
var $q = qFactory(process.nextTick, function noopExceptionHandler() {});
55

6-
//exports.resolved = $q.resolve;
76
exports.rejected = $q.reject;
87
exports.deferred = function () {
98
var deferred = $q.defer();

src/ng/q.js

Lines changed: 36 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ function $QProvider() {
189189
function qFactory(nextTick, exceptionHandler) {
190190

191191

192-
function callOnce(elements) {
193-
var called = false, result = [];
192+
function callOnce(resolveFn, rejectFn) {
193+
var called = false;
194194
function wrap(fn) {
195195
return function(value) {
196196
if (called) return;
@@ -199,10 +199,7 @@ function qFactory(nextTick, exceptionHandler) {
199199
};
200200
}
201201

202-
for (var i = 0; i < elements.length; ++i) {
203-
result.push(wrap(elements[i]));
204-
}
205-
return result;
202+
return [wrap(resolveFn), wrap(rejectFn)];
206203
}
207204

208205
/**
@@ -222,13 +219,25 @@ function qFactory(nextTick, exceptionHandler) {
222219
processScheduled = false;
223220

224221
function processQueue() {
225-
var fn;
222+
var fn, promise;
226223

227224
processScheduled = false;
228225
if (!status) return;
229226
for (var i = 0; i < pending.length; ++i) {
230-
fn = pending[i][status - 1];
231-
fn(value);
227+
promise = pending[i][0];
228+
fn = pending[i][status];
229+
try {
230+
if (isFunction(fn)) {
231+
promise.resolve(fn(value));
232+
} else if (status === 1) {
233+
promise.resolve(value);
234+
} else {
235+
promise.reject(value);
236+
}
237+
} catch(e) {
238+
promise.reject(e);
239+
exceptionHandler(e);
240+
}
232241
}
233242
pending = [];
234243
}
@@ -243,11 +252,11 @@ function qFactory(nextTick, exceptionHandler) {
243252
var then, fns;
244253

245254
if (status) return;
246-
fns = callOnce([resolve, reject]);
247255
if (val === deferred.promise) throw new TypeError('Cycle detected');
256+
fns = callOnce(resolve, reject);
248257
try {
249-
then = val && val.then;
250-
if ((isObject(val) || isFunction(val)) && isFunction(then)) {
258+
if ((isObject(val) || isFunction(val))) then = val && val.then;
259+
if (isFunction(then)) {
251260
then.call(val, fns[0], fns[1], deferred.notify);
252261
} else {
253262
value = val;
@@ -269,37 +278,10 @@ function qFactory(nextTick, exceptionHandler) {
269278

270279
deferred = {
271280
promise: {
272-
then: function(onFulfilled, onRejected, progressback) {
281+
then: function(onFulfilled, onRejected, progressBack) {
273282
var result = defer();
274-
pending.push([
275-
function(val) {
276-
try {
277-
result.resolve(isFunction(onFulfilled) ? onFulfilled(val) : val);
278-
} catch(e) {
279-
result.reject(e);
280-
exceptionHandler(e);
281-
}
282-
},
283-
function(reason) {
284-
try {
285-
if (isFunction(onRejected)) {
286-
result.resolve(onRejected(reason));
287-
} else {
288-
result.reject(reason);
289-
}
290-
} catch(e) {
291-
result.reject(e);
292-
exceptionHandler(e);
293-
}
294-
},
295-
function(progress) {
296-
try {
297-
result.notify(isFunction(progressback) ? progressback(progress) : progress);
298-
} catch(e) {
299-
exceptionHandler(e);
300-
}
301-
}
302-
]);
283+
284+
pending.push([result, onFulfilled, onRejected, progressBack]);
303285
if (status) scheduleProcessQueue();
304286

305287
return result.promise;
@@ -309,7 +291,7 @@ function qFactory(nextTick, exceptionHandler) {
309291
return deferred.promise.then(null, callback);
310292
},
311293

312-
"finally": function(callback, progressback) {
294+
"finally": function(callback, progressBack) {
313295
function makePromise(value, resolved) {
314296
var result = defer();
315297
if (resolved) {
@@ -342,7 +324,7 @@ function qFactory(nextTick, exceptionHandler) {
342324
return handleCallback(value, true);
343325
}, function(error) {
344326
return handleCallback(error, false);
345-
}, progressback);
327+
}, progressBack);
346328
}
347329
},
348330
resolve: resolve,
@@ -352,10 +334,15 @@ function qFactory(nextTick, exceptionHandler) {
352334

353335
if (!status && callbacks.length) {
354336
nextTick(function() {
355-
var callback;
337+
var callback, result;
356338
for (var i = 0, ii = callbacks.length; i < ii; i++) {
357-
callback = callbacks[i][2];
358-
callback(progress);
339+
result = callbacks[i][0];
340+
callback = callbacks[i][3];
341+
try {
342+
result.notify(isFunction(callback) ? callback(progress) : progress);
343+
} catch(e) {
344+
exceptionHandler(e);
345+
}
359346
}
360347
});
361348
}
@@ -418,10 +405,10 @@ function qFactory(nextTick, exceptionHandler) {
418405
* @param {*} value Value or a promise
419406
* @returns {Promise} Returns a promise of the passed value or promise
420407
*/
421-
var when = function(value, callback, errback, progressback) {
408+
var when = function(value, callback, errback, progressBack) {
422409
var result = defer();
423410
result.resolve(value);
424-
return result.promise.then(callback, errback, progressback);
411+
return result.promise.then(callback, errback, progressBack);
425412
};
426413

427414
/**

0 commit comments

Comments
 (0)