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