@@ -177,7 +177,6 @@ exports.addObserver = function(observerState, getter, handler) {
177
177
178
178
if ( storeDeps . size === 0 ) {
179
179
// no storeDeps means the observer is dependent on any of the state changing
180
-
181
180
updatedObserverState = updatedObserverState . updateIn ( [ 'any' ] , getters => getters . add ( getter ) )
182
181
} else {
183
182
updatedObserverState = updatedObserverState . withMutations ( map => {
@@ -246,24 +245,34 @@ exports.removeObserverByEntry = function(observerState, entry) {
246
245
const getter = entry . get ( 'getter' )
247
246
const storeDeps = entry . get ( 'storeDeps' )
248
247
249
- map . updateIn ( [ 'gettersMap' , getter ] , observerIds => observerIds . remove ( id ) ) ;
250
-
251
- if ( map . getIn ( [ 'gettersMap' , getter ] ) . size <= 0 ) {
248
+ const observerIds = map . getIn ( [ 'gettersMap' , getter ] )
249
+ if ( ! observerIds ) {
250
+ // getter doesn't exist if reactor.reset() is called before the unwatchFn()
251
+ return
252
+ }
253
+ const updatedObserverIds = observerIds . remove ( id )
254
+ map . setIn ( [ 'gettersMap' , getter ] , updatedObserverIds )
252
255
256
+ if ( updatedObserverIds . size === 0 ) {
257
+ // all observers have been removed for this getter, remove other entries
253
258
if ( storeDeps . size === 0 ) {
254
259
// no storeDeps means the observer is dependent on any of the state changing
255
260
map . update ( 'any' , getters => getters . remove ( getter ) ) ;
256
261
} else {
257
262
storeDeps . forEach ( storeId => {
258
- map . updateIn ( [ 'stores' , storeId ]
259
- , getters => getters . remove ( getter ) )
263
+ map . updateIn ( [ 'stores' , storeId ] , getters => {
264
+ if ( getters ) {
265
+ // check to make sure the getters Set exists for this store,
266
+ // in the case of reactor.reset() is called before the unwatchFn()
267
+ return getters . remove ( getter )
268
+ }
269
+ return getters
270
+ } )
260
271
} )
261
272
}
262
-
263
273
}
264
274
265
275
map . removeIn ( [ 'observersMap' , id ] )
266
-
267
276
} )
268
277
}
269
278
0 commit comments