- From: Ben Kelly <notifications@github.com>
- Date: Wed, 21 Dec 2016 14:31:07 -0800
- To: w3c/ServiceWorker <ServiceWorker@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
Received on Wednesday, 21 December 2016 22:31:47 UTC
I feel like we discussed this case at one point, but can't find where:
```
addEventListener('fetch', evt => {
// keep alive the SW based on some promise
let resolveOuterPromise;
let p = new Promise(resolve => resolveOuterPromise = resolve);
evt.waitUntil(p);
// Code can be defined to run on the final keep alive promise resolution that
// then keeps the SW alive again.
p.then(_ => {
// I think the spec says this should throw, but I thought we agreed this should work.
evt.waitUntil(fetch(evt.request));
});
// promise resolves at some point...
setTimeout(_ => resolveOuterPromise(), 100);
});
```
I don't think the spec allows this as currently written. Step 4 here:
https://w3c.github.io/ServiceWorker/#extend-service-worker-lifetime-algorithm
Unsets the flag allowing extension immediately after the current set of extension promises settles in step 2. I think this blocks the addition of new extension promises?
Or is there something which guarantees other .then() handlers will run between step 2 and 3 here?
I think we should either explicitly have a microtask to run step 3/4 or run add a comment about some hidden invariant which results in this outcome.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/ServiceWorker/issues/1039
Received on Wednesday, 21 December 2016 22:31:47 UTC