From the docs for angular.equals: "During a property comparison, properties of function type and properties with names that begin with $ are ignored." Since promises are storing their data in $$state, the line angular.equals(tracker.promises,options.promise) returns true even when the promises are different:

This means when the promise changes, the tracker might not get reset with the new promise since it thinks the promise didn't change.
From the docs for angular.equals: "During a property comparison, properties of function type and properties with names that begin with $ are ignored." Since promises are storing their data in $$state, the line
angular.equals(tracker.promises,options.promise)returns true even when the promises are different:This means when the promise changes, the tracker might not get reset with the new promise since it thinks the promise didn't change.