From 9fb359d412d0e624a10833dc70bcb986ed8e8d02 Mon Sep 17 00:00:00 2001 From: Lucas Galfaso Date: Mon, 10 Aug 2015 10:23:39 +0200 Subject: [PATCH] perf($q): small $q performance optimization Only generate a new promise when `then` receives some non-undefined parameter --- lib/promises-aplus/promises-aplus-test-adapter.js | 2 ++ src/ng/q.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lib/promises-aplus/promises-aplus-test-adapter.js b/lib/promises-aplus/promises-aplus-test-adapter.js index 6189dd27e0d2..169d3403e065 100644 --- a/lib/promises-aplus/promises-aplus-test-adapter.js +++ b/lib/promises-aplus/promises-aplus-test-adapter.js @@ -4,6 +4,8 @@ var isFunction = function isFunction(value){return typeof value == 'function';}; var isPromiseLike = function isPromiseLike(obj) {return obj && isFunction(obj.then);}; var isObject = function isObject(value){return value != null && typeof value === 'object';}; +var isUndefined = function isUndefined(value) {return typeof value === 'undefined';}; + var minErr = function minErr (module, constructor) { return function (){ var ErrorConstructor = constructor || Error; diff --git a/src/ng/q.js b/src/ng/q.js index 8713ecb705a2..9466a2e9384d 100644 --- a/src/ng/q.js +++ b/src/ng/q.js @@ -274,6 +274,9 @@ function qFactory(nextTick, exceptionHandler) { extend(Promise.prototype, { then: function(onFulfilled, onRejected, progressBack) { + if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) { + return this; + } var result = new Deferred(); this.$$state.pending = this.$$state.pending || [];