UNPKG

1.26 kBJavaScriptView Raw
1"use strict";
2
3(function () {
4 var waitUntil = ExtendableEvent.prototype.waitUntil;
5 var respondWith = FetchEvent.prototype.respondWith;
6 var promisesMap = new WeakMap();
7
8 ExtendableEvent.prototype.waitUntil = function (promise) {
9 var extendableEvent = this;
10 var promises = promisesMap.get(extendableEvent);
11
12 if (promises) {
13 promises.push(Promise.resolve(promise));
14 return;
15 }
16
17 promises = [Promise.resolve(promise)];
18 promisesMap.set(extendableEvent, promises);
19
20 // call original method
21 return waitUntil.call(extendableEvent, Promise.resolve().then(function processPromises() {
22 var len = promises.length;
23
24 // wait for all to settle
25 return Promise.all(promises.map(function (p) {
26 return p["catch"](function () {});
27 })).then(function () {
28 // have new items been added? If so, wait again
29 if (promises.length != len) return processPromises();
30 // we're done!
31 promisesMap["delete"](extendableEvent);
32 // reject if one of the promises rejected
33 return Promise.all(promises);
34 });
35 }));
36 };
37
38 FetchEvent.prototype.respondWith = function (promise) {
39 this.waitUntil(promise);
40 return respondWith.call(this, promise);
41 };
42})();
\No newline at end of file