Итератор getter не вызывается - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь загрузить файл json и кэшировать его, но получаю сообщение об ошибке.Вот код:

  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        // With the cache opened, load a JSON file containing an array of files to be cached
        return fetch('resource').then(function(response) {
          // Once the contents are loaded, convert the raw text to a JavaScript object
          return response.json();
        }).then(function(files) {
          // Use cache.addAll just as you would a hardcoded array of items
          console.log('[install] Adding files from JSON file: ', files);
          return cache.addAll(files);
        });
      })
      .then(function() {
        // Message to simply show the lifecycle flow
        console.log(
          '[install] All required resources have been cached;',
          'the Service Worker was successfully installed!'
        );

        // Force activation
        return self.skipWaiting();
      })
  );

mysw.js: 42 Uncaught (в обещании) TypeError: Не удалось выполнить «addAll» для «Cache»: средство получения итератора не вызывается.

cache.addAll (файлы);кажется, делает проблемы.

1 Ответ

0 голосов
/ 25 апреля 2019

затем увеличьте:

cache.addAll(files);

Использование:

files.map((url) => {
    return cache.add(url);
});

, поскольку cache.addAll (файлы) будет терпеть неудачу при 1файл недоступен (HTTP 400, 401 и т. д., иногда 5XX и 3XX), чтобы избежать сбоя всех при 1 сбое, используйте отдельный оператор catch в цикле карты.

Проверьте этот ответ для более подробной информации: https://stackoverflow.com/a/46865785/6375501

...