Skip to content

Commit 66ab048

Browse files
fix(promise): avoid uncaught in promise errors due to transition rejections
Closes #2889
1 parent 6958c24 commit 66ab048

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/common.js

+5
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,11 @@ function map(collection, callback) {
209209
return result;
210210
}
211211

212+
// issue #2676 #2889
213+
function silenceUncaughtInPromise (promise) {
214+
return promise.then(undefined, function() {}) && promise;
215+
}
216+
212217
/**
213218
* @ngdoc overview
214219
* @name ui.router.util

src/state.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -718,10 +718,10 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory) {
718718

719719
var TransitionSupersededError = new Error('transition superseded');
720720

721-
var TransitionSuperseded = $q.reject(TransitionSupersededError);
722-
var TransitionPrevented = $q.reject(new Error('transition prevented'));
723-
var TransitionAborted = $q.reject(new Error('transition aborted'));
724-
var TransitionFailed = $q.reject(new Error('transition failed'));
721+
var TransitionSuperseded = silenceUncaughtInPromise($q.reject(TransitionSupersededError));
722+
var TransitionPrevented = silenceUncaughtInPromise($q.reject(new Error('transition prevented')));
723+
var TransitionAborted = silenceUncaughtInPromise($q.reject(new Error('transition aborted')));
724+
var TransitionFailed = silenceUncaughtInPromise($q.reject(new Error('transition failed')));
725725

726726
// Handles the case where a state which is the target of a transition is not found, and the user
727727
// can optionally retry or defer the transition

0 commit comments

Comments
 (0)