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

Commit 78e6a58

Browse files
jbedardgkalpak
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 #15065
1 parent 51c516e commit 78e6a58

File tree

1 file changed

+19
-41
lines changed

1 file changed

+19
-41
lines changed

src/ng/q.js

+19-41
Original file line numberDiff line numberDiff line change
@@ -298,14 +298,14 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
298298
*
299299
* @returns {Deferred} Returns a new instance of deferred.
300300
*/
301-
var defer = function() {
301+
function defer() {
302302
var d = new Deferred();
303303
//Necessary to support unbound execution :/
304304
d.resolve = simpleBind(d, d.resolve);
305305
d.reject = simpleBind(d, d.reject);
306306
d.notify = simpleBind(d, d.notify);
307307
return d;
308-
};
308+
}
309309

310310
function Promise() {
311311
this.$$state = { status: 0 };
@@ -331,9 +331,9 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
331331

332332
'finally': function(callback, progressBack) {
333333
return this.then(function(value) {
334-
return handleCallback(value, true, callback);
334+
return handleCallback(value, resolve, callback);
335335
}, function(error) {
336-
return handleCallback(error, false, callback);
336+
return handleCallback(error, reject, callback);
337337
}, progressBack);
338338
}
339339
});
@@ -372,7 +372,7 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
372372
} finally {
373373
--queueSize;
374374
if (errorOnUnhandledRejections && queueSize === 0) {
375-
nextTick(processChecksFn());
375+
nextTick(processChecks);
376376
}
377377
}
378378
}
@@ -389,25 +389,17 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
389389
}
390390
}
391391

392-
function processChecksFn() {
393-
return function() { processChecks(); };
394-
}
395-
396-
function processQueueFn(state) {
397-
return function() { processQueue(state); };
398-
}
399-
400392
function scheduleProcessQueue(state) {
401393
if (errorOnUnhandledRejections && !state.pending && state.status === 2 && !state.pur) {
402394
if (queueSize === 0 && checkQueue.length === 0) {
403-
nextTick(processChecksFn());
395+
nextTick(processChecks);
404396
}
405397
checkQueue.push(state);
406398
}
407399
if (state.processScheduled || !state.pending) return;
408400
state.processScheduled = true;
409401
++queueSize;
410-
nextTick(processQueueFn(state));
402+
nextTick(function() { processQueue(state); });
411403
}
412404

413405
function Deferred() {
@@ -526,39 +518,27 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
526518
* @param {*} reason Constant, message, exception or an object representing the rejection reason.
527519
* @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
528520
*/
529-
var reject = function(reason) {
521+
function reject(reason) {
530522
var result = new Deferred();
531523
result.reject(reason);
532524
return result.promise;
533-
};
534-
535-
var makePromise = function makePromise(value, resolved) {
536-
var result = new Deferred();
537-
if (resolved) {
538-
result.resolve(value);
539-
} else {
540-
result.reject(value);
541-
}
542-
return result.promise;
543-
};
525+
}
544526

545-
var handleCallback = function handleCallback(value, isResolved, callback) {
527+
function handleCallback(value, resolver, callback) {
546528
var callbackOutput = null;
547529
try {
548530
if (isFunction(callback)) callbackOutput = callback();
549531
} catch (e) {
550-
return makePromise(e, false);
532+
return reject(e);
551533
}
552534
if (isPromiseLike(callbackOutput)) {
553535
return callbackOutput.then(function() {
554-
return makePromise(value, isResolved);
555-
}, function(error) {
556-
return makePromise(error, false);
557-
});
536+
return resolver(value);
537+
}, reject);
558538
} else {
559-
return makePromise(value, isResolved);
539+
return resolver(value);
560540
}
561-
};
541+
}
562542

563543
/**
564544
* @ngdoc method
@@ -578,11 +558,11 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
578558
*/
579559

580560

581-
var when = function(value, callback, errback, progressBack) {
561+
function when(value, callback, errback, progressBack) {
582562
var result = new Deferred();
583563
result.resolve(value);
584564
return result.promise.then(callback, errback, progressBack);
585-
};
565+
}
586566

587567
/**
588568
* @ngdoc method
@@ -624,11 +604,9 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
624604
forEach(promises, function(promise, key) {
625605
counter++;
626606
when(promise).then(function(value) {
627-
if (results.hasOwnProperty(key)) return;
628607
results[key] = value;
629608
if (!(--counter)) deferred.resolve(results);
630609
}, function(reason) {
631-
if (results.hasOwnProperty(key)) return;
632610
deferred.reject(reason);
633611
});
634612
});
@@ -664,7 +642,7 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
664642
return deferred.promise;
665643
}
666644

667-
var $Q = function Q(resolver) {
645+
function $Q(resolver) {
668646
if (!isFunction(resolver)) {
669647
throw $qMinErr('norslvr', 'Expected resolverFn, got \'{0}\'', resolver);
670648
}
@@ -682,7 +660,7 @@ function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
682660
resolver(resolveFn, rejectFn);
683661

684662
return deferred.promise;
685-
};
663+
}
686664

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

0 commit comments

Comments
 (0)