Работнику сервиса не удалось сохранить полученный ответ в cacheStorage с помощью clone () - PullRequest
0 голосов
/ 06 февраля 2020

Я использую clone(), чтобы создать клон объекта ответа. Затем сохраните его в кэш-памяти. Но я получил сообщение об ошибке, когда сервисный работник хочет сохранить ответ о результате выборки. Я использую сервисного работника или клонирую ответ неправильно?

Полученное сообщение об ошибке:

Uncaught (in promise) TypeError: Failed to execute 'clone' on 'Response': Response body is already used

снимок экрана: здесь

Вот часть моего кода:

self.addEventListener("fetch", function(event) {
  // Get asset from cacheStorage first.
  // If it's not cached. Fetch it and cache it.
  event.respondWith(
    caches.match(event.request).then(function(cachedResponse) {
      return (
        cachedResponse ||
        fetch(event.request).then(function(fetchedResponse) {
          console.log(event.request.url);
          caches.open(cacheVersion).then(function(cache) {
            cache.put(event.request, fetchedResponse.clone());
          });

          return fetchedResponse;
        })
      );
    })
  );
}

Весь код: https://github.com/wtlin1228/service-worker/tree/master

1 Ответ

0 голосов
/ 06 февраля 2020

Я думаю, что return вызывается перед выполнением fetch, поэтому возвращается следующая ошибка.

 fetch(event.request).then(function(fetchedResponse) {
          let fetchedResponses = fetchedResponse.clone();
          caches.open(cacheVersion).then((cache) => {
              cache.put(event.request, fetchedResponses);
          });

          return fetchedResponse;
        })
...