在MDN上,我看到service worker selective caching sample被GoogleChrome引用,然后我在<{1}}事件处理程序的<{>文件event.waitUntil()
,其中一个变体引发错误:
未捕获(承诺)的DOMException:无法在“ ExtendableEvent”上执行“ waitUntil”:事件处理程序已经完成,并且没有延长生存期的承诺。
为简洁起见,在适应版本中省略了'activate'
事件处理程序中的条件判断和修改操作,因此核心逻辑是:
service-worker.js
以下是四个适应变量:
'activate'
self.addEventListener('activate', event =>
event.waitUntil(
/* #0 */ '...'
)
)
self.addEventListener('activate', async event =>
event.waitUntil(
/* #1 */ Promise.all(await caches.keys())
)
)
self.addEventListener('activate', event =>
event.waitUntil(
/* #2 */ Promise.resolve().then(async () => Promise.all(await caches.keys()))
)
)
为什么#1会抛出self.addEventListener('activate', event =>
event.waitUntil(
/* #3 */ async function () { return Promise.all(await caches.keys()) }()
)
)
?
尽管如此,#2〜4是正常的。而且我只能观察到在#1处self.addEventListener('activate', event =>
event.waitUntil(
/* #4 */ caches.keys().then(cacheNames => Promise.all(cacheNames))
)
)
的初始值为DOMException
。
非常感谢您!