Javascript `ExtendableEvent.waitill()`接受的承诺的初始状态必须是`;待决的";`?

Javascript `ExtendableEvent.waitill()`接受的承诺的初始状态必须是`;待决的";`?,javascript,promise,service-worker,Javascript,Promise,Service Worker,在上,我看到引用自GoogleChrome的,然后我修改了文件service worker.js中'activate'事件处理程序中event.waitUntil()的参数,其中一个变体抛出错误: 未捕获(在承诺中)DomeException:未能在“ExtendBleevent”上执行“waitUntil”:事件处理程序已完成,并且没有未完成的延长生存期承诺 为简洁起见,'activate'事件处理程序中的条件判断和修改操作在改编版本中被省略,那么核心逻辑是: self.addEventLis

在上,我看到引用自GoogleChrome的,然后我修改了文件
service worker.js
'activate'
事件处理程序中
event.waitUntil()
的参数,其中一个变体抛出错误:

未捕获(在承诺中)DomeException:未能在“ExtendBleevent”上执行“waitUntil”:事件处理程序已完成,并且没有未完成的延长生存期承诺

为简洁起见,
'activate'
事件处理程序中的条件判断和修改操作在改编版本中被省略,那么核心逻辑是:

self.addEventListener('activate',event=>
event.waitill(
/* #0 */ '...'
)
)
以下是四种自适应变体:

self.addEventListener('activate',异步事件=>
event.waitill(
/*#1*/Promise.all(等待caches.keys())
)
)
self.addEventListener('activate',event=>
event.waitill(
/*#2*/Promise.resolve().then(async()=>Promise.all(wait caches.keys())
)
)
self.addEventListener('activate',event=>
event.waitill(
/*#3*/async函数(){return Promise.all(wait caches.keys())}()
)
)
self.addEventListener('activate',event=>
event.waitill(
/*#4*/caches.keys().then(cacheNames=>Promise.all(cacheNames))
)
)
为什么#1抛出
DomeException

不过#2~4是正常的。我只能观察到,#1处的
[[PromiseStatus]]
的初始值是
“已解决”


多谢各位

您是否在侦听器内调用
事件.waitUntil()
?当然,它不是只能在处理程序内调用吗?是的,它只能在处理程序内调用。#1是处理程序本身是
异步的唯一版本。#2~4的异步版本都是正常的。