Ignore connection errors caused by page navigation
authorAlexander Ebert <ebert@woltlab.com>
Thu, 28 Apr 2022 17:45:12 +0000 (19:45 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Thu, 28 Apr 2022 17:45:12 +0000 (19:45 +0200)
See WoltLab/com.woltlab.wbb#539

ts/WoltLabSuite/Core/Ajax/DboAction.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Ajax/DboAction.js

index 241315f6885fad079d53a9c1dae6c582beab2c76..92b9f1266d67f7fe5db36080fa849653194999c0 100644 (file)
@@ -35,6 +35,8 @@ type RequestBody = {
   parameters?: Payload;
 };
 
+let ignoreConnectionErrors: boolean | undefined = undefined;
+
 export class DboAction {
   private readonly actionName: string;
   private readonly className: string;
@@ -49,6 +51,14 @@ export class DboAction {
   }
 
   static prepare(actionName: string, className: string): DboAction {
+    if (ignoreConnectionErrors === undefined) {
+      ignoreConnectionErrors = false;
+
+      window.addEventListener("beforeunload", () => {
+        ignoreConnectionErrors = true;
+      });
+    }
+
     return new DboAction(actionName, className);
   }
 
@@ -147,8 +157,10 @@ export class DboAction {
       if (error instanceof ApiError) {
         throw error;
       } else {
-        // Re-package the error for use in our global "unhandledrejection" handler.
-        throw new ConnectionError(error);
+        if (!ignoreConnectionErrors) {
+          // Re-package the error for use in our global "unhandledrejection" handler.
+          throw new ConnectionError(error);
+        }
       }
     } finally {
       if (showLoadingIndicator) {
index ffaa9bec14530c40776e5d46900e31070b2f85fb..664692bc7ccf4728cdc3c18a5f5538568886337e 100644 (file)
@@ -14,6 +14,7 @@ define(["require", "exports", "tslib", "./Error", "./Status", "../Core"], functi
     exports.DboAction = void 0;
     AjaxStatus = tslib_1.__importStar(AjaxStatus);
     Core = tslib_1.__importStar(Core);
+    let ignoreConnectionErrors = undefined;
     class DboAction {
         constructor(actionName, className) {
             this._objectIDs = [];
@@ -24,6 +25,12 @@ define(["require", "exports", "tslib", "./Error", "./Status", "../Core"], functi
             this.className = className;
         }
         static prepare(actionName, className) {
+            if (ignoreConnectionErrors === undefined) {
+                ignoreConnectionErrors = false;
+                window.addEventListener("beforeunload", () => {
+                    ignoreConnectionErrors = true;
+                });
+            }
             return new DboAction(actionName, className);
         }
         getAbortController() {
@@ -105,8 +112,10 @@ define(["require", "exports", "tslib", "./Error", "./Status", "../Core"], functi
                     throw error;
                 }
                 else {
-                    // Re-package the error for use in our global "unhandledrejection" handler.
-                    throw new Error_1.ConnectionError(error);
+                    if (!ignoreConnectionErrors) {
+                        // Re-package the error for use in our global "unhandledrejection" handler.
+                        throw new Error_1.ConnectionError(error);
+                    }
                 }
             }
             finally {