ExtendableableEvent.waitUntil()接受的Promise的初始状态是否必须为“待处理”?

时间:2020-06-04 10:42:08

标签: javascript promise service-worker

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

非常感谢您!

0 个答案:

没有答案