From 65aece2aadb47c3f7d692aaa687afe6872581179 Mon Sep 17 00:00:00 2001 From: Perry Govier Date: Tue, 19 Aug 2014 15:07:10 -0500 Subject: [PATCH] fix(loading): potential race condition with showing and hiding loading in same watch cycle --- js/angular/service/loading.js | 7 +++++-- test/unit/angular/service/loading.unit.js | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/js/angular/service/loading.js b/js/angular/service/loading.js index 354be3723e..20440daa38 100644 --- a/js/angular/service/loading.js +++ b/js/angular/service/loading.js @@ -158,8 +158,11 @@ function($ionicLoadingConfig, $document, $ionicTemplateLoader, $ionicBackdrop, $ $ionicBackdrop.release(); $ionicBackdrop.getElement().removeClass('backdrop-loading'); } - self.element.removeClass('active'); - $document[0].body.classList.remove('loading-active'); + // wrapping in a timeout to make process asyncronous + $timeout(function(){ + self.element.removeClass('active'); + $document[0].body.classList.remove('loading-active'); + }, 10); setTimeout(function() { !self.isShown && self.element.removeClass('visible'); }, 200); diff --git a/test/unit/angular/service/loading.unit.js b/test/unit/angular/service/loading.unit.js index 36f0a9cf69..9ee62e1ffd 100644 --- a/test/unit/angular/service/loading.unit.js +++ b/test/unit/angular/service/loading.unit.js @@ -89,6 +89,7 @@ describe('$ionicLoading service', function() { $timeout.flush(); expect(angular.element(document.body).hasClass('loading-active')).toBe(true); loader.hide(); + $timeout.flush(); expect(angular.element(document.body).hasClass('loading-active')).toBe(false); }));