Ошибка: запрос объекта, который уже был использован - PullRequest
0 голосов
/ 04 мая 2019

Я получаю эту ошибку в журнале консоли.

Uncaught (в обещании) TypeError: Не удалось выполнить 'fetch' для 'ServiceWorkerGlobalScope': Невозможно создать запрос с объектом запроса, который уже использовался.

Я пытался сменить работника службы, но он не работает

self.addEventListener('install', (event) => event.waitUntil(preLoad()));

const preLoad = function () {
  return caches.open('cc-offline').then((cache) => {
    return cache.addAll(['/offline.html', '/index.html']);
  });
}

self.addEventListener('fetch', (event) => {
  event.respondWith(checkResponse(event.request).catch(function () {
    return returnFromCache(event.request)
  }));
  event.waitUntil(addToCache(event.request));
});

const checkResponse = (request) => {
  return new Promise((fulfill, reject) => {
    fetch(request).then((response) => {
      (response.status !== 404) ? fulfill(response) : reject()
    }, reject)
  });
};

const addToCache = (request) => {
  return caches.open('cc-offline').then((cache) => {
    return fetch(request).then((response) => {
      return cache.put(request, response);
    });
  });
};

const returnFromCache = (request) => {
  return caches.open('cc-offline').then((cache) => {
    return cache.match(request).then((matching) => {
      return (!matching || matching.status == 404) ? cache.match('offline.html') : matching
    });
  });
};

1 Ответ

0 голосов
/ 04 мая 2019

fetch не позволяет использовать запрос дважды, по крайней мере, в текущей версии :).Использование одного и того же объекта запроса в checkResponse и addToCache может иметь место.Вы можете попытаться клонировать объект запроса перед вызовом fetch, как упомянуто здесь Почему этот код не может выполнить 'fetch'?

...