Ошибка pwa: Uncaught (в обещании) TypeError: Запрос не выполнен - PullRequest
1 голос
/ 03 июля 2019

Я новичок в pwa, использую сервисного работника со списком кэша, как показано ниже

var filesToCache = [
'',
'favicon.ico',
'index.html',
'login.html',
'forgot-password.html',
'select-path.html',
'station-based.html',
'train-based.html',
'../index.html',
'/assets/css/app.min.css',
'/assets/js/jquery.min.js',
'/assets/js/popper.min.js',
'/assets/js/bootstrap-material-design.min.js',
'/assets/js/material-kit.min.js',
'/assets/js/jquery.validate.min.js',    
//  '/assets/js/validate.js',               // raise issue 
'/assets/js/app.js',  
//   '/services/login.js',                    // raise issue 
'/assets/images/chiltern-logo.svg', 
];

Я получаю ниже сообщение об ошибке в консоли для этих двух файлов

 /assets/js/validate.js
 /services/login.js

Uncaught (in promise) TypeError: Request failed

хотя эти два файла существуют в принадлежащем месте нет больше ошибки на консоли относительно там файлов мой полный код работника службы, как показано ниже

var cacheName = 'v4';
var lastCacheName = 'v3';
var filesToCache = [
'',
'favicon.ico',
'index.html',
'login.html',
'forgot-password.html',
'select-path.html',
'station-based.html',
'train-based.html',
'../index.html',
'/assets/css/app.min.css',
'/assets/js/jquery.min.js',
'/assets/js/popper.min.js',
'/assets/js/bootstrap-material-design.min.js',
'/assets/js/material-kit.min.js',
'/assets/js/jquery.validate.min.js',
//    '/assets/js/validate.js',               // raise issue 
'/assets/js/app.js',  
//  '/services/login.js',                    // raise issue 
'/assets/images/chiltern-logo.svg', 
];

 self.addEventListener('install', function(e) {  
 e.waitUntil(
 caches.open(cacheName).then(function(cache) {
  console.log('[ServiceWorker] Caching app shell');
  return cache.addAll(filesToCache);
 })
 );
 });

 self.addEventListener('activate',  event => {    
 event.waitUntil(
  caches.keys().then(function(cacheNames) {
    console.log('[ServiceWorker] activate',cacheName);
    return Promise.all(
      cacheNames.filter(function(cacheName) {
        // Return true if you want to remove this cache,
        // but remember that caches are shared across
        // the whole origin
      }).map(function(cacheName) {
        console.log('[ServiceWorker] activate delete',cacheName);
        return caches.delete(cacheName);
      })
     );
   })
   );
   });

self.addEventListener('fetch', event => {  
event.respondWith(
 caches.match(event.request, {ignoreSearch:true}).then(response => {
  return response || fetch(event.request);
 })
);
});

Я не могу понять, в чем проблема. Пожалуйста, помогите.

1 Ответ

1 голос
/ 04 июля 2019

Я подозреваю, что Service Service Worker не может найти эти два файла, поэтому я бы начал с проверки, правильно ли они написаны / существуют в этом месте и т. Д.

Код, который вы используете, имеет ".then" без ".catch", поэтому у вас есть неперехваченная ошибка, так как любое отклоненное обещание приведет к ошибке, которую вы не обрабатываете.

Ваш массив имен файлов содержит опечатку. Последний не должен иметь запятую после строки и перед квадратной скобкой. Я также не уверен, почему первая запись в этом массиве является пустой строкой.

...