diff --git a/src/db.tsx b/src/db.ts similarity index 65% rename from src/db.tsx rename to src/db.ts index 0e7953d7e..a47aa4c59 100644 --- a/src/db.tsx +++ b/src/db.ts @@ -19,14 +19,14 @@ function getDB(): Promise { db.createObjectStore("savestring"); }; - indexedDbRequest.onerror = function (this: IDBRequest, ev: Event) { - reject(`Failed to get IDB ${ev}`); + indexedDbRequest.onerror = function (this: IDBRequest) { + reject(new Error("Failed to get IDB", { cause: this.error })); }; indexedDbRequest.onsuccess = function (this: IDBRequest) { const db = this.result; if (!db) { - reject("database loading result was undefined"); + reject(new Error("database loading result was undefined")); return; } resolve(db.transaction(["savestring"], "readwrite").objectStore("savestring")); @@ -35,21 +35,17 @@ function getDB(): Promise { } export function load(): Promise { - return new Promise((resolve, reject) => { - getDB() - .then((db) => { - return new Promise((resolve, reject) => { - const request: IDBRequest = db.get("save"); - request.onerror = function (this: IDBRequest, ev: Event) { - reject("Error in Database request to get save data: " + ev); - }; + return getDB().then((db) => { + return new Promise((resolve, reject) => { + const request: IDBRequest = db.get("save"); + request.onerror = function (this: IDBRequest) { + reject(new Error("Error in Database request to get save data", { cause: this.error })); + }; - request.onsuccess = function (this: IDBRequest) { - resolve(this.result); - }; - }).then((saveData) => resolve(saveData)); - }) - .catch((r) => reject(r)); + request.onsuccess = function (this: IDBRequest) { + resolve(this.result); + }; + }); }); } @@ -59,8 +55,8 @@ export function save(saveData: SaveData): Promise { // We'll save to IndexedDB const request = db.put(saveData, "save"); - request.onerror = function (e) { - reject("Error saving game to IndexedDB: " + e); + request.onerror = function (this: IDBRequest) { + reject(new Error("Error saving game to IndexedDB", { cause: this.error })); }; request.onsuccess = () => resolve(); diff --git a/src/ui/LoadingScreen.tsx b/src/ui/LoadingScreen.tsx index 09e35dcb3..729e169ab 100644 --- a/src/ui/LoadingScreen.tsx +++ b/src/ui/LoadingScreen.tsx @@ -32,21 +32,18 @@ export function LoadingScreen(): React.ReactElement { }); useEffect(() => { - load().then(async (saveData) => { - try { - await initSwc(); - await Engine.load(saveData); - } catch (error) { + load() + .then((saveData) => Promise.all([initSwc(), Engine.load(saveData)])) + .then(() => { + pushGameReady(); + setLoaded(true); + }) + .catch(async (error) => { console.error(error); ActivateRecoveryMode(error); await Engine.load(""); setLoaded(true); - return; - } - - pushGameReady(); - setLoaded(true); - }); + }); }, []); return loaded ? ( diff --git a/src/ui/React/DeleteGameButton.tsx b/src/ui/React/DeleteGameButton.tsx index 59228ac56..d5b13860b 100644 --- a/src/ui/React/DeleteGameButton.tsx +++ b/src/ui/React/DeleteGameButton.tsx @@ -29,7 +29,7 @@ export function DeleteGameButton({ color = "primary" }: IProps): React.ReactElem pushDisableRestore(); setTimeout(() => location.reload(), 1000); }) - .catch((r) => console.error(`Could not delete game: ${r}`)); + .catch((r) => console.error("Could not delete game: %o", r)); }} open={modalOpened} onClose={() => setModalOpened(false)}