【问题标题】:Service worker run event waitUntil() based on some conditionService Worker 根据某些条件运行事件 waitUntil()
【发布时间】:2019-10-31 19:26:42
【问题描述】:

我正在尝试在后台更新缓存的服务工作者中实现cache-then-network 策略。我想避免不必要的fetch 请求,所以想出了以下解决方案-

function cache_then_network(event) {
    var updated = false;
    event.respondWith(
        caches.open(staticCacheName)
            .then(cache => cache.match(event.request)
                .then((response) => {
                    if (response) {
                        return response;
                    }
                    else {
                        return fetch(event.request)
                        .then((response) => {
                            const resClone = response.clone();
                            return caches.open(staticCacheName)
                                .then((cache) => {
                                    cache.put(event.request, response);
                                    updated = true;
                                    return resClone;
                                })
                        })
                    }
                })
            )
    )
    if (!updated) {
        event.waitUntil(update(event.request))
    }
}

update 函数通过使用网络获取请求来更新缓存。问题是updated 变量始终为假,导致update 函数每次都运行。

我对服务人员不太熟悉,代码基本上是从多个来源拼接而成的。所以欢迎替代/更好的解决方案。我的最终目标是先缓存,在后台从网络中获取,并设置一个标志来告知内容是否已更改。

【问题讨论】:

    标签: javascript service-worker service-worker-events


    【解决方案1】:

    Service Worker offline-cookbook 有所有答案 -

    self.addEventListener('fetch', function(event) {
      event.respondWith(
        caches.open('mysite-dynamic').then(function(cache) {
          return cache.match(event.request).then(function(response) {
            var fetchPromise = fetch(event.request).then(function(networkResponse) {
              cache.put(event.request, networkResponse.clone());
              return networkResponse;
            })
            return response || fetchPromise;
          })
        })
      );
    });
    

    【讨论】:

      猜你喜欢
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      相关资源
      最近更新 更多