Bladeren bron

Исправление обработки ошибок вебсокета при запросах

Book Pauk 2 jaren geleden
bovenliggende
commit
b7555fe55d
1 gewijzigde bestanden met toevoegingen van 25 en 13 verwijderingen
  1. 25 13
      client/components/Api/Api.vue

+ 25 - 13
client/components/Api/Api.vue

@@ -186,22 +186,34 @@ class Api {
     }
 
     async request(params, timeoutSecs = 10) {
+        let errCount = 0;
         while (1) {// eslint-disable-line
-            if (this.accessToken)
-                params.accessToken = this.accessToken;
-
-            const response = await wsc.message(await wsc.send(params), timeoutSecs);
-
-            if (response && response.error == 'need_access_token') {
-                await this.showPasswordDialog();
-            } else if (response && response.error == 'server_busy') {
-                await this.showBusyDialog();
-            } else {
-                if (response.error) {
-                    throw new Error(response.error);
+            try {
+                if (this.accessToken)
+                    params.accessToken = this.accessToken;
+
+                const response = await wsc.message(await wsc.send(params), timeoutSecs);
+
+                if (response && response.error == 'need_access_token') {
+                    await this.showPasswordDialog();
+                } else if (response && response.error == 'server_busy') {
+                    await this.showBusyDialog();
+                } else {
+                    if (response.error) {
+                        throw new Error(response.error);
+                    }
+
+                    return response;
                 }
 
-                return response;
+                errCount = 0;
+            } catch(e) {
+                errCount++;
+                if (e.message !== 'WebSocket не отвечает' || errCount > 10) {
+                    errCount = 0;
+                    throw e;
+                }
+                await utils.sleep(100);
             }
         }
     }