-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathservice-worker.patch
39 lines (39 loc) · 1.23 KB
/
service-worker.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
4c4,39
<
---
> const waitUntil = ExtendableEvent.prototype.waitUntil;
> const respondWith = FetchEvent.prototype.respondWith;
> const promisesMap = new WeakMap();
>
> ExtendableEvent.prototype.waitUntil = function(promise) {
> const extendableEvent = this;
> let promises = promisesMap.get(extendableEvent);
>
> if (promises) {
> promises.push(Promise.resolve(promise));
> return;
> }
>
> promises = [Promise.resolve(promise)];
> promisesMap.set(extendableEvent, promises);
>
> // call original method
> return waitUntil.call(extendableEvent, Promise.resolve().then(function processPromises() {
> const len = promises.length;
>
> // wait for all to settle
> return Promise.all(promises.map(p => p.catch(()=>{}))).then(() => {
> // have new items been added? If so, wait again
> if (promises.length != len) return processPromises();
> // we're done!
> promisesMap.delete(extendableEvent);
> // reject if one of the promises rejected
> return Promise.all(promises);
> });
> }));
> };
>
> FetchEvent.prototype.respondWith = function(promise) {
> this.waitUntil(promise);
> return respondWith.call(this, promise);
> };