fix: potential race condition on app load when migration (#2977)

Co-authored-by: Alex Yang <himself65@outlook.com>
This commit is contained in:
Peng Xiao
2023-07-03 17:40:02 +08:00
committed by GitHub
parent ee2ab4086f
commit 901fc87716
3 changed files with 11 additions and 8 deletions
+1 -7
View File
@@ -129,16 +129,10 @@ if (environment.isBrowser) {
})
.finally(() => {
window.dispatchEvent(new CustomEvent('migration-done'));
window.$migrationDone = true;
});
} catch (e) {
console.error('error when migrating data', e);
}
}
}
declare global {
// global Events
interface WindowEventMap {
'migration-done': CustomEvent;
}
}
+6
View File
@@ -35,6 +35,12 @@ declare global {
events: any;
}
interface WindowEventMap {
'migration-done': CustomEvent;
}
// eslint-disable-next-line no-var
var $migrationDone: boolean;
// eslint-disable-next-line no-var
var platform: Platform | undefined;
// eslint-disable-next-line no-var
+4 -1
View File
@@ -118,7 +118,10 @@ const rootWorkspacesMetadataPromiseAtom = atom<
}
// migration step, only data in `METADATA_STORAGE_KEY` will be migrated
if (metadata.some(meta => !('version' in meta))) {
if (
metadata.some(meta => !('version' in meta)) &&
!globalThis.$migrationDone
) {
await new Promise<void>((resolve, reject) => {
signal.addEventListener('abort', () => reject(), { once: true });
window.addEventListener('migration-done', () => resolve(), {