Skip to content

Commit 92bce13

Browse files
jbedardpetebacondarwin
authored andcommitted
refactor($q): remove unnecessary checks/helpers/wrappers
- Remove internal `makePromise()` helper. - Remove unnecessary wrapper functions. - Remove unnecessary check for promises resolving multiple times. (By following the Promises/A+ spec, we know this will never happen.) - Switch from function expressions to (named) function declarations. Closes angular#15065
1 parent e55f805 commit 92bce13

File tree

1 file changed

+16
-30
lines changed

1 file changed

+16
-30
lines changed

src/ng/q.js

+16-30
Original file line numberDiff line numberDiff line change
@@ -257,14 +257,14 @@ function qFactory(nextTick, exceptionHandler) {
257257
*
258258
* @returns {Deferred} Returns a new instance of deferred.
259259
*/
260-
var defer = function() {
260+
function defer() {
261261
var d = new Deferred();
262262
//Necessary to support unbound execution :/
263263
d.resolve = simpleBind(d, d.resolve);
264264
d.reject = simpleBind(d, d.reject);
265265
d.notify = simpleBind(d, d.notify);
266266
return d;
267-
};
267+
}
268268

269269
function Promise() {
270270
this.$$state = { status: 0 };
@@ -290,9 +290,9 @@ function qFactory(nextTick, exceptionHandler) {
290290

291291
'finally': function(callback, progressBack) {
292292
return this.then(function(value) {
293-
return handleCallback(value, true, callback);
293+
return handleCallback(value, resolve, callback);
294294
}, function(error) {
295-
return handleCallback(error, false, callback);
295+
return handleCallback(error, reject, callback);
296296
}, progressBack);
297297
}
298298
});
@@ -450,39 +450,27 @@ function qFactory(nextTick, exceptionHandler) {
450450
* @param {*} reason Constant, message, exception or an object representing the rejection reason.
451451
* @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
452452
*/
453-
var reject = function(reason) {
453+
function reject(reason) {
454454
var result = new Deferred();
455455
result.reject(reason);
456456
return result.promise;
457-
};
458-
459-
var makePromise = function makePromise(value, resolved) {
460-
var result = new Deferred();
461-
if (resolved) {
462-
result.resolve(value);
463-
} else {
464-
result.reject(value);
465-
}
466-
return result.promise;
467-
};
457+
}
468458

469-
var handleCallback = function handleCallback(value, isResolved, callback) {
459+
function handleCallback(value, resolver, callback) {
470460
var callbackOutput = null;
471461
try {
472462
if (isFunction(callback)) callbackOutput = callback();
473463
} catch (e) {
474-
return makePromise(e, false);
464+
return reject(e);
475465
}
476466
if (isPromiseLike(callbackOutput)) {
477467
return callbackOutput.then(function() {
478-
return makePromise(value, isResolved);
479-
}, function(error) {
480-
return makePromise(error, false);
481-
});
468+
return resolver(value);
469+
}, reject);
482470
} else {
483-
return makePromise(value, isResolved);
471+
return resolver(value);
484472
}
485-
};
473+
}
486474

487475
/**
488476
* @ngdoc method
@@ -502,11 +490,11 @@ function qFactory(nextTick, exceptionHandler) {
502490
*/
503491

504492

505-
var when = function(value, callback, errback, progressBack) {
493+
function when(value, callback, errback, progressBack) {
506494
var result = new Deferred();
507495
result.resolve(value);
508496
return result.promise.then(callback, errback, progressBack);
509-
};
497+
}
510498

511499
/**
512500
* @ngdoc method
@@ -548,11 +536,9 @@ function qFactory(nextTick, exceptionHandler) {
548536
forEach(promises, function(promise, key) {
549537
counter++;
550538
when(promise).then(function(value) {
551-
if (results.hasOwnProperty(key)) return;
552539
results[key] = value;
553540
if (!(--counter)) deferred.resolve(results);
554541
}, function(reason) {
555-
if (results.hasOwnProperty(key)) return;
556542
deferred.reject(reason);
557543
});
558544
});
@@ -588,7 +574,7 @@ function qFactory(nextTick, exceptionHandler) {
588574
return deferred.promise;
589575
}
590576

591-
var $Q = function Q(resolver) {
577+
function $Q(resolver) {
592578
if (!isFunction(resolver)) {
593579
throw $qMinErr('norslvr', 'Expected resolverFn, got \'{0}\'', resolver);
594580
}
@@ -606,7 +592,7 @@ function qFactory(nextTick, exceptionHandler) {
606592
resolver(resolveFn, rejectFn);
607593

608594
return deferred.promise;
609-
};
595+
}
610596

611597
// Let's make the instanceof operator work for promises, so that
612598
// `new $q(fn) instanceof $q` would evaluate to true.

0 commit comments

Comments
 (0)