Błąd ERRBLOBDEREFERENCEDWHILEBUILDING występuje najczęściej w środowiskach webowych (np. przeglądarkach opartych o Chromium), gdy przetwarzany jest obiekt typu Blob i dochodzi do jego dereferencji w trakcie budowania — czyli mechanizm lub aplikacja próbuje odwołać się do blobu, który został już usunięty lub nie jest dłużej dostępny, zanim zakończy się proces jego budowy.
Poniżej znajdziesz kompletny poradnik — od wyjaśnienia, przyczyn, przez szczegółowe instrukcje naprawy dla webmasterów/deweloperów, jak i użytkownika końcowego.
Wyjaśnienie błędu
Blob (Binary Large Object) to reprezentacja pliku binarnego w JavaScript, np. pliku przesyłanego, generowanego dynamicznie lub przetwarzanego na stronie.
ERRBLOBDEREFERENCEDWHILEBUILDING oznacza, że podczas przetwarzania blobu (pobierania, zapisywania, przesyłania), został on doreferencjonowany — odłączony od źródła lub usunięty — zanim zakończono cały proces.
Przyczyny błędu
Najczęstsze przyczyny:
- Przedwczesne usunięcie blobu przez kod JavaScript przed zakończeniem operacji na nim (np. upload, download, przetwarzanie).
- Błąd synchronizacji (race condition) — kod próbuje korzystać z blobu podczas, gdy ten nie został jeszcze ukończony lub jest w trakcie tworzenia.
- Równoczesny dostęp do blobu przez wiele wątków/komponentów i zakończenie życia blobu przez jeden z nich.
- Zamknięcie źródła (np. streamu lub pliku) przed zakończeniem buildowania blobu.
- Problemy w silniku przeglądarki (rzadziej — bug w Chromium lub WebKit obsługującym blob URL).
Instrukcje naprawy
Poniżej szczegółowe kroki diagnostyczne i naprawcze dla obu grup: webmaster/web deweloper oraz użytkownik końcowy.
Dla webmastera/web dewelopera
- Przejrzyj kod JavaScript obsługujący blob –
-
Upewnij się, że blob/objekt nie jest zwalniany (np. przez
URL.revokeObjectURL) ani nie zostaje ustawiony nanullprzed zakończeniem wszelkiego przetwarzania. -
Przykład — nieprawidłowy (może powodować błąd):
let blobUrl = URL.createObjectURL(blob); downloadFile(blobUrl); URL.revokeObjectURL(blobUrl); // Za wcześnie! -
Poprawny:
let blobUrl = URL.createObjectURL(blob); downloadFile(blobUrl); // Poczekaj na zakończenie działania, np. po zamknięciu dialogu pobierania setTimeout(() => { URL.revokeObjectURL(blobUrl); }, 5000); // lub po konkretnym evencie
- Unikaj wyścigów (race conditions) –
- Nie twórz nowych blobów ani nie podmieniaj referencji podczas trwania operacji.
- Jeśli używasz asynchronicznych funkcji (np.
fetch().then(...), async/await), zachowuj referencję na blob do czasu ukończenia zadania.
- Sprawdzaj żywotność blobów –
-
Gdy blob jest budowany w odpowiedzi na backend API lub z wejścia użytkownika, zapewnij właściwą obsługę błędów, np.:
try { // ... kod pobierający blob } catch (e) { // Błąd: blob już niedostępny showError("Plik już nie istnieje lub został usunięty."); }
- Diagnozuj w konsoli deweloperskiej –
- Sprawdź, w którym momencie blob staje się niedostępny. Używaj breakpointów i logów.
- Sprawdź, czy inne wątki/skrypty nie modyfikują/zamykają blobu równocześnie.
- Testuj w najnowszych wersjach przeglądarek –
- Część błędów mogła być naprawiona w nowszych wersjach Chromium/Chrome/Edge.
Dla użytkownika końcowego
- Odśwież stronę — może to odnowić sesję blobu i naprawić problem, gdy blob powstał w nieaktualnej sesji.
- Sprawdź aktualizacje przeglądarki oraz wtyczek — czasem błąd to efekt konfliktu rozszerzenia/addona.
- Wyczyść cache przeglądarki — stare odnośniki blob mogą zalegać i powodować błędy.
- Spróbuj innej przeglądarki — aby potwierdzić, że błąd nie leży w konkretnej implementacji.
- Skontaktuj się z obsługą serwisu — jeśli błąd się powtarza, powiadom administratora strony, podając nazwę pliku i czynność, która wywołała błąd.
Dodatkowe informacje
- W silniku Chromium, kod źródłowy obsługujący blob implementuje obsługę tego błędu przez zwrócenie ERR_UNEXPECTED w sytuacji, gdy blob przestaje istnieć/budować się podczas operacji.
- Błąd tego typu jest często związany z optymalizacjami wydajności (np. praca na wielu wątkach, przetwarzanie plików na żądanie), dlatego poprawna synchronizacja i kontrola żywotności blobów są kluczowe.
- Stan wyścigu (race condition) to sytuacja, gdy kilka procesów/operacji próbuje jednocześnie uzyskać dostęp lub modyfikować ten sam zasób — w tym wypadku blob.
Słownik pojęć
- Blob – Binary Large Object (duży, binarny obiekt: plik, dane multimedialne) reprezentowany w JS.
- Dereferencja – „Odłączanie” obiektu, czyli sytuacja, gdy obiekt przestaje być dostępny przez referencję w kodzie.
- Race condition (stan wyścigu) – Błąd współbieżności, gdy kolejność wykonania nie jest gwarantowana i powoduje błędy logiczne.
- URL.createObjectURL(blob) – Tworzy tymczasowy URL prowadzący do blobu.
- URL.revokeObjectURL(url) – Unieważnia utworzony URL blobu.
Podsumowanie najważniejszych kroków (dla webmastera):
- Nie usuwaj referencji do blobu zbyt wcześnie (przed końcem operacji).
- Diagnosticuj i eliminuj race conditions w kodzie pracującym z blobami.
- Sprawdzaj i obsługuj błędy asynchroniczne/wyjątki AJAX/Fetch/.then() oraz zdarzenia użytkownika.
- Informuj użytkownika końcowego, gdy plik został już usunięty lub sesja wygasła.
Właściwa obsługa tych scenariuszy pozwala niemal całkowicie wyeliminować błąd ERRBLOBDEREFERENCEDWHILEBUILDING w praktyce.

