代码之家  ›  专栏  ›  技术社区  ›  Adam Zerner

当我试图缓存xxx时,服务人员不会安装。工人js

  •  7
  • Adam Zerner  · 技术社区  · 8 年前

    我的Vue应用程序中有以下服务人员代码:

    主要的js

    if (navigator.serviceWorker) {
      navigator.serviceWorker.register('/service-worker.js').catch(function() {
        console.log('Service worker registration failed.');
      });
    }
    

    服务人员。js

    let currCacheName = 'premium-poker-tools-5';
    
    self.addEventListener('install', function(event) {
      event.waitUntil(
        caches.open(currCacheName).then(function(cache) {
          let promise = cache.addAll([
            '/',
            'app.js',
            'c7d016677eb7e912bc40.worker.js',
            'f328c7e2b379df12fa4c.worker.js',
            'static/logo.png',
            'static/favicon.png',
            'static/loading.svg',
            'static/cards/ace-of-clubs.png',
            'static/cards/king-of-clubs.png',
            'static/cards/queen-of-clubs.png',
            'static/cards/jack-of-clubs.png',
            'static/cards/ten-of-clubs.png',
            'static/cards/nine-of-clubs.png',
            'static/cards/eight-of-clubs.png',
            'static/cards/seven-of-clubs.png',
            'static/cards/six-of-clubs.png',
            'static/cards/five-of-clubs.png',
            'static/cards/four-of-clubs.png',
            'static/cards/three-of-clubs.png',
            'static/cards/two-of-clubs.png',
            'static/cards/ace-of-spades.png',
            'static/cards/king-of-spades.png',
            'static/cards/queen-of-spades.png',
            'static/cards/jack-of-spades.png',
            'static/cards/ten-of-spades.png',
            'static/cards/nine-of-spades.png',
            'static/cards/eight-of-spades.png',
            'static/cards/seven-of-spades.png',
            'static/cards/six-of-spades.png',
            'static/cards/five-of-spades.png',
            'static/cards/four-of-spades.png',
            'static/cards/three-of-spades.png',
            'static/cards/two-of-spades.png',
            'static/cards/ace-of-hearts.png',
            'static/cards/king-of-hearts.png',
            'static/cards/queen-of-hearts.png',
            'static/cards/jack-of-hearts.png',
            'static/cards/ten-of-hearts.png',
            'static/cards/nine-of-hearts.png',
            'static/cards/eight-of-hearts.png',
            'static/cards/seven-of-hearts.png',
            'static/cards/six-of-hearts.png',
            'static/cards/five-of-hearts.png',
            'static/cards/four-of-hearts.png',
            'static/cards/three-of-hearts.png',
            'static/cards/two-of-hearts.png',
            'static/cards/ace-of-diamonds.png',
            'static/cards/king-of-diamonds.png',
            'static/cards/queen-of-diamonds.png',
            'static/cards/jack-of-diamonds.png',
            'static/cards/ten-of-diamonds.png',
            'static/cards/nine-of-diamonds.png',
            'static/cards/eight-of-diamonds.png',
            'static/cards/seven-of-diamonds.png',
            'static/cards/six-of-diamonds.png',
            'static/cards/five-of-diamonds.png',
            'static/cards/four-of-diamonds.png',
            'static/cards/three-of-diamonds.png',
            'static/cards/two-of-diamonds.png',
            'static/feedback/1.png',
            'static/feedback/2.png',
            'static/feedback/3.png',
            'static/feedback/4.png',
            'static/feedback/flop-selector.png',
            'static/feedback/green-grid-squares.png',
            'static/feedback/user-set-range-to-simulate-to-street.png',
            'static/guides/beginners-guide/1.png',
            'static/guides/beginners-guide/2.png',
            'static/guides/beginners-guide/3.png',
            'static/guides/beginners-guide/4.png',
            'static/guides/beginners-guide/5.png',
            'static/guides/beginners-guide/6.png',
            'static/guides/beginners-guide/7.png',
            'static/guides/beginners-guide/8.png',
            'static/guides/beginners-guide/9.png',
            'static/guides/beginners-guide/10.png',
            'static/guides/beginners-guide/11.png',
            'static/guides/beginners-guide/12.png',
            'static/guides/beginners-guide/13.png',
            'static/guides/beginners-guide/14.png',
            'static/guides/beginners-guide/15.png',
            'static/guides/beginners-guide/16.png',
            'static/guides/beginners-guide/17.png',
            'static/guides/beginners-guide/18.png',
            'static/guides/beginners-guide/19.png',
            'static/guides/beginners-guide/20.png',
            'static/guides/beginners-guide/21.png',
            'static/guides/faq/double-counting/1.png',
            'static/guides/faq/hit-percentage-calculation/1.png',
            'static/guides/faq/hit-percentage-calculation/2.png',
            'static/guides/faq/hit-percentage-calculation/3.png',
            'static/guides/faq/insights/1.png',
            'static/guides/faq/insights/2.png',
            'static/guides/faq/insights/3.png',
            'static/guides/faq/insights/4.png',
            'static/guides/faq/insights/5.png',
            'static/guides/faq/insights/6.png',
            'static/guides/faq/insights/7.png',
            'static/guides/faq/insights/8.png',
            'static/guides/faq/set-checks-to-default/1.png',
            'static/guides/quick-guide/1.png',
            'static/guides/quick-guide/2.png',
            'static/guides/quick-guide/3.png',
            'static/guides/quick-guide/4.png',
            'static/guides/quick-guide/5.png',
            'static/guides/quick-guide/6.png',
            'static/guides/quick-guide/7.png',
            'static/guides/quick-guide/8.png',
            'static/guides/quick-guide/save-load-scenario.png',
            'static/home/1.png',
            'static/home/2.png',
            'static/home/3.png',
            'static/settings/equity-calculator-insights-not-visible.png',
            'static/settings/equity-calculator-insights-visible.png',
            'static/settings/outcome-analyzer-checkboxes-collapsed-1.png',
            'static/settings/outcome-analyzer-checkboxes-collapsed-2.png',
            'static/settings/outcome-analyzer-checkboxes-included-1.png',
            'static/settings/outcome-analyzer-checkboxes-included-2.png',
            'static/settings/outcome-analyzer-hands.png',
            'static/settings/outcome-analyzer-insights-not-visible.png',
            'static/settings/outcome-analyzer-insights-visible.png',
            'static/settings/saved-ranges-1.png',
            'static/settings/saved-ranges-2.png',
            'static/settings/saved-ranges-3.png',
            'static/settings/saved-ranges-4.png',
            'static/settings/included-selectors/double-slider-selector.png',
            'static/settings/included-selectors/log-double-slider-selector.png',
            'static/settings/included-selectors/saved-ranges-selector.png',
            'static/settings/included-selectors/single-slider-selector.png',
            'static/settings/included-selectors/tier-and-category-selector.png',
            'static/settings/tiers/tiers.png',
            'static/settings/visual/dont-show-num-combos-in-range.png',
            'static/settings/visual/green-grid-squares.png',
            'static/settings/visual/multicolored-grid-squares.png',
            'static/settings/visual/show-num-combos-in-range.png',
          ]).then(function () {
            console.log('Successfully cached everything.')
          }).catch(function (error) {
            console.log('Problem caching: ', error);
          });
    
          return promise;
        }).catch(function () {
          console.error('Error with caches.open or cache.addAll');
        })
      );
    });
    
    self.addEventListener('activate', function(event) {
      event.waitUntil(
        caches.keys()
          .then(function getOldCachesThatBeginWithPremiumPokerToolsDash (cacheNames) {
            return cacheNames.filter(function (cacheName) {
              return cacheName.startsWith('premium-poker-tools-') && (cacheName !== currCacheName);
            });
          })
          .then(function removeOldCachesThatBeginWithPremiumPokerToolsDash (oldCachesThatBeginWithPremiumPokerToolsDash) {
            let removeCachePromises = [];
    
            oldCachesThatBeginWithPremiumPokerToolsDash.forEach(function (oldCacheThatBeginsWithPremiumPokerToolsDash) {
              removeCachePromises.push(caches.delete(oldCacheThatBeginsWithPremiumPokerToolsDash));
            });
    
            return Promise.all(removeCachePromises);
          })
      );
    });
    
    self.addEventListener('fetch', function(event) {
      event.respondWith(
        caches.match(event.request).then(function (response) {
          if (response) {
            return response;
          }
    
          return fetch(event.request);
        }).catch(function () {
          console.error('Error trying to match event request to cache.');
        })
      );
    });
    

    当我发表评论时 'c7d016677eb7e912bc40.worker.js' 'f328c7e2b379df12fa4c.worker.js' ,很好用。但当我取消注释它们时,会发生以下情况:

    • 我开始使用开发工具,注销任何服务人员,删除缓存中的任何内容,这样我就可以从头开始了。
    • 我装载 localhost:8080 .
    • 服务人员留在房间里 installing 状态
    • 在缓存中,我看到了 c7d016677eb7e912bc40.worker.js f328c7e2b379df12fa4c.worker.js 已成功缓存。
    • 然而,“成功地缓存了所有内容。”没有登录到控制台。但是“问题缓存:”也没有被记录。

    我明白 the promise you pass to event.waitUntil() lets the browser know when your install completes, and if it was successful. 所以很明显,这个承诺存在一些问题。但我不知道问题是什么。它没有击中目标 .then 封锁还是封锁 .catch 块,当我在开发工具中查看缓存存储时,似乎 'c7d016677eb7e912bc40。工人js' “f328c7e2b379df12fa4c。工人js' 正在成功缓存。

    worker-loader .我觉得这个问题与如何加载工作者文件有关,但我不明白为什么会有问题,因为当我转到 localhost:8080/c7d016677eb7e912bc40.worker.js localhost:8080/f328c7e2b379df12fa4c.worker.js ,我得到了JS文件。

    此外,我还确保前缀 c7d016677eb7e912bc40。工人js f328c7e2b379df12fa4c。工人js 准确无误。那 c7d016677eb7e912bc40 f328c7e2b379df12fa4c 准确无误。

    更新:

    enter image description here

    enter image description here

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  0
  •   miknik    8 年前

    caches.open(currCacheName).then(function(cache) {
      let promise = cache.addAll([
    

    您正在定义一个名为 promise 在这里,但它不能取代 cache ,这是需要实现的承诺。

    您有大量资产要缓存,然后:

     'static/settings/visual/show-num-combos-in-range.png',
          ]).then(function () {
            console.log('Successfully cached everything.')
          }).catch(function (error) {
            console.log('Problem caching: ', error);
          });
    

    你在这里什么都不退,所以 .then .catch 也不会。

    你的缓存被填满了,但你对 extendableEvent.waitUntil() 永远不会解决,所以安装永远不会完成。

    要么放弃你的承诺变量/控制台。记录并返回缓存。就像这样:

    self.addEventListener('install', function(event) {
      event.waitUntil(
        caches.open(currCacheName).then(function(cache) {
          return cache.addAll([
            '/',
            'app.js',
            'static/settings/visual/show-num-combos-in-range.png',
          ])
        })
      );
    });
    

    或者使函数异步,如下所示:

    self.addEventListener('install', event => {
      event.waitUntil(async function() {
        const cache = await caches.open(currCacheName);
        await cache.addAll([
            '/',
            'app.js',
            'static/settings/visual/show-num-combos-in-range.png',
        ]);
      }());
    });
    
    推荐文章