diff --git a/client/api/reader.js b/client/api/reader.js index c17cccef..a38328ca 100644 --- a/client/api/reader.js +++ b/client/api/reader.js @@ -18,17 +18,22 @@ class Reader { if (!callback) callback = () => {}; let response = {}; - try { await wsc.open(); const requestId = wsc.send({action: 'worker-get-state-finish', workerId}); + let prevResponse = false; while (1) {// eslint-disable-line no-constant-condition response = await wsc.message(requestId); - callback(response); - if (!response.state) - throw new Error('Неверный ответ api'); + if (!response.state && prevResponse !== false) {//экономия траффика + callback(prevResponse); + } else {//были изменения worker state + if (!response.state) + throw new Error('Неверный ответ api'); + callback(response); + prevResponse = response; + } if (response.state == 'finish' || response.state == 'error') { break; @@ -127,6 +132,9 @@ class Reader { response = await api.post('/restore-cached-file', {path: url}); response = response.data; } + if (response.state == 'error') { + throw new Error(response.error); + } const workerId = response.workerId; if (!workerId) @@ -215,6 +223,9 @@ class Reader { const state = response.state; if (!state) throw new Error('Неверный ответ api'); + if (response.state == 'error') { + throw new Error(response.error); + } return response; } diff --git a/client/api/webSocketConnection.js b/client/api/webSocketConnection.js index bbcb21a3..e5b79789 100644 --- a/client/api/webSocketConnection.js +++ b/client/api/webSocketConnection.js @@ -111,11 +111,7 @@ class WebSocketConnection { requestId, timeout, onMessage: (mes) => { - if (mes.error) { - reject(mes.error); - } else { - resolve(mes); - } + resolve(mes); }, onError: (e) => { reject(e); diff --git a/server/controllers/WebSocketController.js b/server/controllers/WebSocketController.js index 33b61a0b..af73f175 100644 --- a/server/controllers/WebSocketController.js +++ b/server/controllers/WebSocketController.js @@ -122,9 +122,10 @@ class WebSocketController { while (1) {// eslint-disable-line no-constant-condition const prevProgress = state.progress || -1; const prevState = state.state || ''; + const lastModified = state.lastModified || 0; state = this.workerState.getState(req.workerId); - this.send((state ? state : {}), req, ws); + this.send((state && lastModified != state.lastModified ? state : {}), req, ws); if (!state) break; if (state.state != 'finish' && state.state != 'error')