Skip to content

Commit 418da38

Browse files
fix(Transition): Unwrap rejected transition promise value before rejecting overall promise
1 parent 649db16 commit 418da38

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/transition/transition.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -312,15 +312,18 @@ export class Transition implements IHookRegistry {
312312
run () {
313313
let hookBuilder = this.hookBuilder();
314314
let runSynchronousHooks = TransitionHook.runSynchronousHooks;
315+
// TODO: nuke these in favor of chaining off the promise, i.e.,
316+
// $transitions.onBefore({}, $transition$ => {$transition$.promise.then()}
315317
const runSuccessHooks = () => runSynchronousHooks(hookBuilder.getOnSuccessHooks(), {}, true);
316318
const runErrorHooks = ($error$) => runSynchronousHooks(hookBuilder.getOnErrorHooks(), { $error$ }, true);
317319
// Run the success/error hooks *after* the Transition promise is settled.
318320
this.promise.then(runSuccessHooks, runErrorHooks);
319321

320-
let promiseChain = runSynchronousHooks(hookBuilder.getOnBeforeHooks());
322+
let syncResult = runSynchronousHooks(hookBuilder.getOnBeforeHooks());
321323

322-
if (TransitionHook.isRejection(promiseChain)) {
323-
this._deferred.reject(promiseChain);
324+
if (TransitionHook.isRejection(syncResult)) {
325+
let rejectReason = (<any> syncResult).reason;
326+
this._deferred.reject(rejectReason);
324327
return this.promise;
325328
}
326329

@@ -351,8 +354,8 @@ export class Transition implements IHookRegistry {
351354

352355
trace.traceTransitionStart(this);
353356

354-
promiseChain = hookBuilder.asyncHooks().reduce((_chain, step) => _chain.then(step.invokeStep), promiseChain);
355-
promiseChain.then(resolve, reject);
357+
let chain = hookBuilder.asyncHooks().reduce((_chain, step) => _chain.then(step.invokeStep), syncResult);
358+
chain.then(resolve, reject);
356359

357360
return this.promise;
358361
}

0 commit comments

Comments
 (0)