From d5f71a448dd8724a97e589a94d974d84248c477f Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Sun, 2 Oct 2016 17:15:23 +0200 Subject: [PATCH] fix(view-controller): dismiss does not crash when called more than once fixes #8395 --- src/navigation/test/view-controller.spec.ts | 18 ++++++++++++++++++ src/navigation/view-controller.ts | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/src/navigation/test/view-controller.spec.ts b/src/navigation/test/view-controller.spec.ts index f11d6f6b74..078de5741a 100644 --- a/src/navigation/test/view-controller.spec.ts +++ b/src/navigation/test/view-controller.spec.ts @@ -117,8 +117,26 @@ describe('ViewController', () => { viewController.dismiss('didDismiss data'); }, 10000); + + it('should not crash when calling dismiss() twice', (done) => { + // arrange + let viewController = mockView(); + let navControllerBase = mockNavController(); + mockViews(navControllerBase, [viewController]); + + viewController.onDidDismiss((data: any) => { + expect(data).toEqual('didDismiss data'); + setTimeout(() => { + viewController.dismiss(); // it should not crash + done(); + }, 100); + }); + + viewController.dismiss('didDismiss data'); + }, 10000); }); + afterEach(() => { if (subscription) { subscription.unsubscribe(); diff --git a/src/navigation/view-controller.ts b/src/navigation/view-controller.ts index 34615982e3..6075824888 100644 --- a/src/navigation/view-controller.ts +++ b/src/navigation/view-controller.ts @@ -180,6 +180,10 @@ export class ViewController { * */ dismiss(data?: any, role?: any, navOptions: NavOptions = {}) { + if (!this._nav) { + return Promise.resolve(false); + } + let options = merge({}, this._leavingOpts, navOptions); this._onWillDismiss && this._onWillDismiss(data, role); return this._nav.remove(this._nav.indexOf(this), 1, options).then(() => {