From 5a1b4fd37225df71d3fd8caa0a178d9abf8013af Mon Sep 17 00:00:00 2001 From: Johannes Ewald Date: Tue, 12 Nov 2013 18:27:00 +0100 Subject: [PATCH] fixed a bug in `when`-method where an array with only one promise was immediately resolved --- underscore.deferred.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/underscore.deferred.js b/underscore.deferred.js index 0ac57ee..b92d0ac 100644 --- a/underscore.deferred.js +++ b/underscore.deferred.js @@ -383,15 +383,20 @@ resolveValues = ( _type(subordinate) === 'array' && arguments.length === 1 ) ? subordinate : slice.call( arguments ), length = resolveValues.length; - if ( _type(subordinate) === 'array' && subordinate.length === 1 ) { - subordinate = subordinate[ 0 ]; - } - // the count of uncompleted subordinates - var remaining = length !== 1 || ( subordinate && _isFunction( subordinate.promise ) ) ? length : 0, + var remaining; + + if ( _type(subordinate) === 'array' ) { + remaining = length; + if ( subordinate.length === 1 ) { + subordinate = subordinate[ 0 ]; + } + } else { + remaining = length !== 1 || ( subordinate && _isFunction( subordinate.promise ) ) ? length : 0; + } // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : _d.Deferred(), + var deferred = remaining === 1 ? subordinate : _d.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) {