@@ -41,6 +41,7 @@ function $Resolve( $q, $injector) {
41
41
*/
42
42
this . study = function ( invocables ) {
43
43
if ( ! isObject ( invocables ) ) throw new Error ( "'invocables' must be an object" ) ;
44
+ var invocableKeys = Object . keys ( invocables || { } ) ;
44
45
45
46
// Perform a topological sort of invocables to build an ordered plan
46
47
var plan = [ ] , cycle = [ ] , visited = { } ;
@@ -101,7 +102,7 @@ function $Resolve( $q, $injector) {
101
102
if ( ! -- wait ) {
102
103
if ( ! merged ) merge ( values , parent . $$values ) ;
103
104
result . $$values = values ;
104
- result . $$promises = true ; // keep for isResolve()
105
+ result . $$promises = result . $$promises || true ; // keep for isResolve()
105
106
delete result . $$inheritedValues ;
106
107
resolution . resolve ( values ) ;
107
108
}
@@ -111,28 +112,36 @@ function $Resolve( $q, $injector) {
111
112
result . $$failure = reason ;
112
113
resolution . reject ( reason ) ;
113
114
}
114
-
115
+
116
+ // TODO: Remove this when we merge in 'new' branch
117
+ function omit ( obj ) {
118
+ var copy = { } , keys = angular . isArray ( arguments [ 1 ] ) ? arguments [ 1 ] : arguments . slice ( 1 ) ;
119
+ for ( var key in obj )
120
+ if ( keys . indexOf ( key ) == - 1 ) copy [ key ] = obj [ key ] ;
121
+ return copy ;
122
+ }
123
+
115
124
// Short-circuit if parent has already failed
116
125
if ( isDefined ( parent . $$failure ) ) {
117
126
fail ( parent . $$failure ) ;
118
127
return result ;
119
128
}
120
129
121
130
if ( parent . $$inheritedValues ) {
122
- merge ( values , parent . $$inheritedValues ) ;
131
+ merge ( values , omit ( parent . $$inheritedValues , invocableKeys ) ) ;
123
132
}
124
133
125
134
// Merge parent values if the parent has already resolved, or merge
126
135
// parent promises and wait if the parent resolve is still in progress.
136
+ extend ( promises , parent . $$promises ) ;
127
137
if ( parent . $$values ) {
128
- merged = merge ( values , parent . $$values ) ;
129
- result . $$inheritedValues = parent . $$values ;
138
+ merged = merge ( values , omit ( parent . $$values , invocableKeys ) ) ;
139
+ result . $$inheritedValues = omit ( parent . $$values , invocableKeys ) ;
130
140
done ( ) ;
131
141
} else {
132
142
if ( parent . $$inheritedValues ) {
133
- result . $$inheritedValues = parent . $$inheritedValues ;
143
+ result . $$inheritedValues = omit ( parent . $$inheritedValues , invocableKeys ) ;
134
144
}
135
- extend ( promises , parent . $$promises ) ;
136
145
parent . then ( done , fail ) ;
137
146
}
138
147
0 commit comments