let waitUntilResolve; let bodyController; self.addEventListener('message', evt => { if (evt.data === 'done') { bodyController.close(); waitUntilResolve(); } }); self.addEventListener('fetch', evt => { if (!evt.request.url.includes('partial-stream.txt')) { return; } evt.waitUntil(new Promise(resolve => waitUntilResolve = resolve)); let body = new ReadableStream({ start: controller => { let encoder = new TextEncoder(); controller.enqueue(encoder.encode('partial-stream-content')); bodyController = controller; }, }); evt.respondWith(new Response(body)); });