From 4ab0c337f17af6cf4fe0d6fb5025085228448a73 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 15 Jan 2020 16:20:46 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/api/reader.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/client/api/reader.js b/client/api/reader.js index 0e94c4b1..b57f0a79 100644 --- a/client/api/reader.js +++ b/client/api/reader.js @@ -9,22 +9,14 @@ const workerApi = axios.create({ }); class Reader { - async loadBook(opts, callback) { + + async getStateFinish(workerId, callback) { if (!callback) callback = () => {}; - let response = await api.post('/load-book', opts); - - const workerId = response.data.workerId; - if (!workerId) - throw new Error('Неверный ответ api'); - - callback({totalSteps: 4}); - callback(response.data); - //присылается текст, состоящий из json-объектов state каждые 300ms, с разделителем splitter между ними const splitter = '-- aod2t5hDXU32bUFyqlFE next status --'; let lastIndex = 0; - response = await workerApi.post('/get-state-finish', {workerId}, { + let response = await workerApi.post('/get-state-finish', {workerId}, { onDownloadProgress: progress => { //небольая оптимизация, вместо простого responseText.split const xhr = progress.target; @@ -57,6 +49,23 @@ class Reader { } } + return response; + } + + async loadBook(opts, callback) { + if (!callback) callback = () => {}; + + let response = await api.post('/load-book', opts); + + const workerId = response.data.workerId; + if (!workerId) + throw new Error('Неверный ответ api'); + + callback({totalSteps: 4}); + callback(response.data); + + response = await this.getStateFinish(workerId, callback); + if (response) { if (response.state == 'finish') {//воркер закончил работу, можно скачивать кешированный на сервере файл callback({step: 4}); @@ -83,7 +92,7 @@ class Reader { } async loadCachedBook(url, callback) { - const response = await axios.head(url); + const response = await axios.head(url, {headers: {'Cache-Control': 'no-cache'}}); let estSize = 1000000; if (response.headers['content-length']) {