Web Workers w React.js

0

Popełniłam kod, który działa u mnie lokalnie na komputerze w domu (jest tworzony w VSCode, a że działa widzę po uruchomieniu apki przez wewnętrzny live server VS Code), natomiast po wysłaniu na gh-pages i otwarciu w przglądarce już nie działa.

Klasa, która zwraca przepisanego webworkera. Nie jestem autorką - to jest z jakiegoś przykładu z sieci. Bez tego nie działało również u mnie na kompie.


export default class WebWorker {
	constructor(worker) {
		const code = worker.toString();
		const blob = new Blob(['('+code+')()']);
		return new Worker(URL.createObjectURL(blob));
	}
}

Sam worker

self.addEventListener("message", e => {/* eslint-disable-line no-restricted-globals */
  let startIndex = 0;
  const indexStep = 40; // 
  let temporaryStorage = [];
  var result = { error: false };
  var URL = e.data;
  async function recursiveSingleFetch(path) {
    
    const fullPath = path + startIndex.toString();
    try {
      const x = await fetch(fullPath);
      if (x) {
        const resp = await x.json();
        if (resp.items) {
          startIndex += indexStep;
          temporaryStorage = temporaryStorage.concat(resp.items);
          recursiveSingleFetch(path);
        }
        else(self.postMessage(temporaryStorage)/* eslint-disable-line no-restricted-globals */)
      }
    } catch (e) {result.error = true;result.errorMessage = e.message;self.postMessage(result)/* eslint-disable-line no-restricted-globals */}
    
  }
  recursiveSingleFetch(URL);
}

);
}

Jedno i drugie jest importowane do pliku

import worker from './fetchworker';
import WebWorker from './workerSetup';

i konsumowane tak oto:

var fetchWorker = new WebWorker(worker);

fetchWorker.onmessage = e => {
  const result = e.data;
  if (result.errorMessage) {
    console.log('result', result);
    store.dispatch({type:"ERROR_SHOW", payload: result})
    redirect.error();
   
  } else {

    if (result.length === 0) {redirect.not_found()}else{
    
    result.input = formatFetchedBooks(result);
          store.dispatch({ type: "BOOKS_FETCH", payload: result });
          redirect.books();
    }
  }
};
fetchWorker.postMessage(path);
}

Jeżeli uznacie, że lepsza będzie wersja skrócona to napiszcie - w sumie same sedno działania webworkera trochę zasłania sposób wywoływania. Wersja odpalana przez gh-pages wyrzuca błąd wskazujący na to, że web worker nie istnieje (albo jego metoda onmessage nie dostaje argumentu),przy czym to bardziej moja hipoteza, komunikat błędu linkuje tylko skompilowany kod ( który niby do czegoś przypisuję, ale bez szczególnej pewności).
Gdzie szukać przyczyny? Mogę się tylko domyślać, że u mnie na kompie plik workera jeszcze występuje jako taki, natomiast w paczce, która idzie na gh-pages już nie i stąd błąd, ale jak to obejść, jeżeli to o to chodzi?

0

Jaki to dokładnie błąd? I gdzie jest ta strona?

0

@LukeJL:
No to jedziemy
to jest wersja rzucająca błąd w akcji
https://kiszuriwalilibori.github.io/google_books_router_redux/
https://github.com/Kiszuriwalilibori/google_books_router_redux

Co się tyczy katalogu/podkatalogu/ nie bardzo wiem co odpowiedzieć. Rozumiesz, nie do końca kojarzę jak to działa. To co się faktycznie renderuje idzie do brancza gh-pages. ale takj mam w kilku innych projektach ( i tylko w jednym kiedyś byl problem - biblioteka granim wymagała podania ścieżki tak, jakby tpo byo pobierane z zewnątrz (tzn. https:/githubpages/raw... i coś tam dalej)zamiast './jsplik'

1 użytkowników online, w tym zalogowanych: 0, gości: 1