From 06bc243e5421a39248baea4ad95154a43426e95b Mon Sep 17 00:00:00 2001 From: Tejas Dinkar Date: Fri, 4 Jan 2019 16:58:01 +0530 Subject: [PATCH] feat(Worker): waitUntil and respondWith must be bound to e in order to work --- app/worker.js | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/app/worker.js b/app/worker.js index f169558..0730ea8 100644 --- a/app/worker.js +++ b/app/worker.js @@ -31,6 +31,28 @@ function buildRequest(url, opts) { return new Request(request, { headers }); } +class FetchEvent { + constructor(request) { + this.responsePromise = null; + this.waitEvents = []; + this.type = "fetch"; + this.request = request; + } + + waitUntil(e) { + this.waitEvents.push(e); + } + + respondWith(e) { + this.responsePromise = e; + } + + async __response() { + const [response, ...others] = await Promise.all([this.responsePromise].concat(this.waitEvents)); + return response; + } +} + class Worker { constructor(origin, workerContents, opts = {}) { const { upstreamHost, kvStores = {} } = opts; @@ -86,16 +108,9 @@ class Worker { } async executeFetchEvent(url, opts = {}) { - let responsePromise = null; - let waitUntil = []; - this.triggerEvent("fetch", { - type: "fetch", - request: buildRequest(url, opts), - respondWith: r => (responsePromise = r), - waitUntil: e => waitUntil.push(e) - }); - const [response, ...others] = await Promise.all([responsePromise].concat(waitUntil)); - return response; + const fetchEvent = new FetchEvent(buildRequest(url, opts)); + this.triggerEvent("fetch", fetchEvent); + return fetchEvent.__response(); } addEventListener(event, listener) {