Skip to content

Commit 74b4d4c

Browse files
committed
use platform ready recreate promise
1 parent 3809142 commit 74b4d4c

File tree

2 files changed

+43
-25
lines changed

2 files changed

+43
-25
lines changed

apply-changes.sh

+11-11
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
set -o errexit
33

44
# Script vars
5-
APP_NAME=${IONIC_APP_NAME:-testapp}
5+
APP_NAME=${IONIC_APP_NAME:-../testapp}
66

77
# Sync to iOS
8-
cp ./dist/* ../${APP_NAME}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/
9-
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.common", function(require, exports, module) {"use strict"/' ../${APP_NAME}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/common.js
10-
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.guards", function(require, exports, module) {"use strict"/' ../${APP_NAME}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/guards.js
11-
echo '});' >> ../${APP_NAME}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/common.js
12-
echo '});' >> ../${APP_NAME}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/guards.js
8+
cp ./dist/* ${APP_PATH}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/
9+
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.common", function(require, exports, module) {"use strict"/' ${APP_PATH}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/common.js
10+
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.guards", function(require, exports, module) {"use strict"/' ${APP_PATH}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/guards.js
11+
echo '});' >> ${APP_PATH}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/common.js
12+
echo '});' >> ${APP_PATH}/platforms/ios/www/plugins/cordova-plugin-ionic/dist/guards.js
1313

1414
# Sync to Android
15-
cp ./dist/* ../${APP_NAME}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/
16-
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.common", function(require, exports, module) {"use strict"/' ../${APP_NAME}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/common.js
17-
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.guards", function(require, exports, module) {"use strict"/' ../${APP_NAME}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/guards.js
18-
echo '});' >> ../${APP_NAME}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/common.js
19-
echo '});' >> ../${APP_NAME}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/guards.js
15+
cp ./dist/* ${APP_PATH}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/
16+
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.common", function(require, exports, module) {"use strict"/' ${APP_PATH}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/common.js
17+
sed -i '' 's/"use strict"/cordova.define("cordova-plugin-ionic.guards", function(require, exports, module) {"use strict"/' ${APP_PATH}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/guards.js
18+
echo '});' >> ${APP_PATH}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/common.js
19+
echo '});' >> ${APP_PATH}/platforms/android/platform_www/plugins/cordova-plugin-ionic/dist/guards.js

www/common.ts

+32-14
Original file line numberDiff line numberDiff line change
@@ -620,13 +620,11 @@ class IonicDeploy implements IDeployPluginAPI {
620620
private fetchIsAvailable: boolean;
621621
private lastPause = 0;
622622
private minBackgroundDuration = 10;
623-
private _platformIsReady: Promise<undefined>;
624623

625624
constructor(parent: IPluginBaseAPI) {
626625
this.parent = parent;
627626
this.delegate = this.initialize();
628627
this.fetchIsAvailable = typeof(fetch) === 'function';
629-
this._platformIsReady = this.platformReady();
630628
document.addEventListener('deviceready', this.onLoad.bind(this));
631629
}
632630

@@ -651,19 +649,39 @@ class IonicDeploy implements IDeployPluginAPI {
651649
return delegate;
652650
}
653651

654-
private async platformReady(): Promise<undefined> {
655-
if (!this._platformIsReady) {
656-
return new Promise<undefined>((resolve, reject) => {
657-
if (window.cordova) {
658-
document.addEventListener('deviceready', () => {
659-
resolve();
660-
});
661-
} else {
662-
reject();
663-
}
664-
});
652+
private async platformReady(): Promise<void> {
653+
let ready = false;
654+
while (!ready) {
655+
const readyPromise = this.deviceReadyPromise();
656+
// I don't know why but keep recreating the promise every 200 milliseconds for Ionic1
657+
// apparently errors in the app.js and perhaps elsewhere in Ionic1 can cause deviceReady
658+
// to be swallowed some how causing splash screen to hang
659+
// and recreating the listener seems to get the event
660+
const timeout = this.timeoutPromise(200);
661+
try {
662+
await Promise.race([timeout, readyPromise]);
663+
ready = true;
664+
} catch (e) {
665+
console.log('platform ready timed out waiting for device ready creating new listener');
666+
}
665667
}
666-
return this._platformIsReady;
668+
}
669+
670+
private async timeoutPromise(delay: number): Promise<undefined> {
671+
return new Promise<undefined>( (resolve, reject) => {
672+
setTimeout(reject, delay);
673+
});
674+
}
675+
private async deviceReadyPromise(): Promise<undefined> {
676+
return new Promise<undefined>((resolve, reject) => {
677+
if (window.cordova) {
678+
document.addEventListener('deviceready', () => {
679+
resolve();
680+
});
681+
} else {
682+
reject();
683+
}
684+
});
667685
}
668686

669687
async onLoad() {

0 commit comments

Comments
 (0)