reader.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import axios from 'axios';
  2. import {sleep} from '../share/utils';
  3. const api = axios.create({
  4. baseURL: '/api/reader'
  5. });
  6. const workerApi = axios.create({
  7. baseURL: '/api/worker'
  8. });
  9. class Reader {
  10. async loadBook(url, callback) {
  11. let response = await api.post('/load-book', {type: 'url', url});
  12. const workerId = response.data.workerId;
  13. if (!workerId)
  14. throw new Error('Неверный ответ api');
  15. let i = 0;
  16. while (1) {// eslint-disable-line no-constant-condition
  17. if (callback)
  18. callback(response.data);
  19. if (response.data.state == 'finish') {
  20. let book = await axios.get(response.data.path, {});
  21. return Object.assign({}, response.data, {data: book.data});
  22. }
  23. if (response.data.state == 'error') {
  24. throw new Error(response.data.error);
  25. }
  26. if (i > 0)
  27. await sleep(500);
  28. i++;
  29. if (i > 60) {
  30. throw new Error('Слишком долгое время ожидания');
  31. }
  32. response = await workerApi.post('/get-state', {workerId});
  33. }
  34. }
  35. }
  36. export default new Reader();