#progressive-web-apps #service-worker
#progressive-web-apps #service-worker
Вопрос:
Я пытаюсь запустить и запустить базовый service worker.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю «caches.open ()», браузер выдает
sw.js:1 Uncaught (in promise) DOMException: Unexpected internal error
Закомментируйте кеши.open удаляет исключение.
Как я могу получить дополнительную информацию из браузера, чтобы узнать, что не так?
Вот service worker и регистрационный код.
var CACHE_NAME = 'pwacache-v1';
var urlsToCache = [
'/',
'main.css'
];
self.addEventListener('install', function (event) {
// Perform install steps
console.log('install');
try {
event.waitUntil(getFiles());
} catch (ex) {
console.log(ex);
}
});
function getFiles() {
console.log('opening: ' CACHE_NAME );
/*
triggers Uncaught (in promise) DOMException: Unexpected internal error
*/
caches.open(CACHE_NAME).then(function (cache) {
return Promise.all(
urlsToCache.map(function (url) {
console.log(url);
return cache.add(url).catch(function (reason) {
console.log([url "failed: " String(reason)]);
});
}) // end of map
);
});
console.log('waiting 3...')
}
И регистрационный код
// https://developers.google.com/web/fundamentals/primers/service-workers/registration
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('sw.js');
});
}
Я вижу sw.js зарегистрирован на вкладке «Приложение» Chrome.
Комментарии:
1. Ошибка возникает только при запуске Visual Studio браузера Google Chrome. Если я вручную запускаю Chrome, или использую Chrome Igconito Window, или использую Microsoft Edge, исключение DOM отсутствует. Тьфу.
Ответ №1:
Вам нужно вернуть обещание из getFiles()
, чтобы на самом event.waitUntil()
деле дождаться асинхронной работы. Поэтому я рекомендую вернуть обещание, возвращенное вашей цепочкой обещаний, с которой началась caches.open()
.
Без этого возможно, что service worker завершается до завершения асинхронной работы.
Комментарии:
1. Спасибо, Бен, мне нужно будет выяснить, как это сделать, чтобы я мог попробовать. Есть идеи?
2. Добавьте
return
ключевое слово передcaches.open()
вызовом.3. Спасибо, Бен, ценю твою проницательность и помощь в программировании.