服务工作者拥有这个不错的功能 - 在全球范围内,有一个承诺navigator.serviceWorker.ready
。您可以使用它来确保在初始化服务工作程序时调用代码。有趣的是,它在服务工作者初始化后也能正常工作。你可以随时做:
navigator.serviceWorker.ready.then(function() {/* something */});
如果工作人员已经准备就绪,它会立即开火。
我怎样才能做出这种初始化承诺?例如,在我的服务工作者中,我有以下代码:
var cache;
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open('offline-v1')
.then(function(c) {
cache = c;
})
);
event.waitUntil(self.skipWaiting());
});
如果缓存失败到init,我如何制作全局承诺cacheReady
保证resolve
使用缓存对象或reject
,但是init事件已被解雇?我正在寻找作为一般解决方案。我可以为此编写一些特殊代码,但我想了解这个问题的正确基于承诺的解决方案。