Workbox - получить с NetworkFirst, не возвращаясь в кеш - PullRequest
0 голосов
/ 02 октября 2019

Я пишу .Net MVC приложение и использую Workbox. Я пытаюсь использовать стратегию NetworkFirst для «выборки» - в моем сервис-работнике у меня есть следующее: -

const API_ProductLoadData_URL = '/Product/LoadData';
const ProductLoadData_CacheName = 'product-index-loaddata';

const apiProductLoadDataCallHandler = new workbox.strategies.NetworkFirst({
    cacheName: ProductLoadData_CacheName,
    networkTimeoutSeconds: 5,
    plugins: [
      new workbox.expiration.Plugin({
          maxAgeSeconds: 60 * 60,
          maxEntries: 10,
      }),
    ]
});

workbox.routing.registerRoute(
    API_ProductLoadData_URL,
    apiProductLoadDataCallHandler
);

self.addEventListener('install', event => {
    event.waitUntil(
      caches.open(ProductLoadData_CacheName)
        .then(cache => cache.add(API_ProductLoadData_URL))
    );
});

self.addEventListener('fetch', (event) => {
    event.respondWith(async function() {
        try {
            const fetchResponse = await fetch(event.request);
            if (fetchResponse.status === 404) {
                return await caches.match(event.request);
            } else {
                return fetchResponse;
            }
        } catch (err) {
            return await caches.match(event.request);
        } 
    }());
});

В коде моей веб-страницы у меня есть следующее: -

const API_ProductLoadData_URL = '/Product/LoadData';
fetch(API_ProductLoadData_URL, {
})
.then(function (response) {
    var contentType = response.headers.get('content-type');
    if (contentType && contentType.includes('application/json')) {
        return response.json();
    }

    throw new TypeError("Oops, we haven't got JSON!");
})
.then(function (json) {
    ...
)}

Когда я пытаюсь описать вышеизложенное с использованием стратегии CacheFirst или StaleWhileRevalidate, все выглядит нормально (с настройкой кода в сервисном работнике) - т.е. маршрут ведет себя так, как и следовало ожидать - выборка перехватывается и код внутриОбработчик «fetch» ​​выполняет возврат обратно кэшированного JSON

Однако, когда я не в сети, хотя я думаю, что маршрут выборки подключен правильно, он все равно выбрасывает 404 (не найдено) на моей странице - я быожидал, что 404 будет обработан в маршрутизации 'fetch' (работник службы), и кэшированный результат будет возвращен на мою страницу

Примечание - я тестирую локально (на моей машине) - для имитации автономно, яя прекращаю работу IIS

Кто-нибудь знает, почему я не могу заставить обработчик события выборки работника службы передать мне обратно кэшированный результат, если произошел сбой сети

...