Что может вызвать Обещание, отклоненное 'InvalidStateError'
здесь?Что может вызвать обещание, отклоненное здесь 'InvalidStateError' здесь?
const SERVICE_WORKER_VERSION = "3.0.0"; // is updated in the build when things change
const CACHE_VERSION = SERVICE_WORKER_VERSION;
const fillServiceWorkerCache = function() {
/* save in cache some static ressources
this happens before activation */
return caches.open(CACHE_VERSION).then(function(cache) {
return cache.addAll(ressourcesToSaveInCache);
});
};
self.addEventListener("install", function (event) {
/*event.waitUntil takes a promise that should resolves successfully*/
event.waitUntil(fillServiceWorkerCache().then(function() {
return self.skipWaiting();
}));
});
В Firefox версии 52 следующая ошибка: Service worker event waitUntil() was passed a promise that rejected with 'InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable'.
Работник службы убит, и удаляется после этого. Он отлично работает с Chrome. ressourcesToSaveInCache
- это массив относительных URL-адресов.
Редактировать изменить его на
event.waitUntil(
fillServiceWorkerCache()
.then(skipWaiting)
.catch(skipWaiting)
);
и регистры обслуживания рабочих! Однако fillServiceWorkerCache
отклонено, что немаловажно (без автономного кеша). Теперь вопрос в том, почему fillServiceWorkerCache
отклоняет, и что сообщение об ошибке пытается сказать?
Редактировать вдохновленный ответ Хосар в:
const fillServiceWorkerCache2 = function() {
return caches.open(CACHE_VERSION).then(function (cache) {
return Promise.all(
ressourcesToSaveInCache.map(function (url) {
return cache.add(url).catch(function (reason) {
return console.log(url + "failed: " + String(reason));
})
})
);
});
};
Эта версия распространяется обещание в обратной цепи, что делает waitUntil()
на самом деле ждать. Он не будет кэшировать, а также не отклонять отдельные ресурсы, которые не были добавлены в кеш.
Edit 2: После исправления недействительных относительных URL-адресов в ressourcesToSaveInCache, ошибка исчезла