使用ReadableStream的Service Worker出现ERR_CONNECTION_RESET问题
解决ReadableStream导致的ERR_CONNECTION_RESET问题
嘿,我瞅了下你的代码,大概率是踩了event.waitUntil和event.respondWith嵌套使用的坑!
问题根源
event.respondWith是专门用来接管请求响应的核心方法,它不需要被包裹在event.waitUntil里。waitUntil的作用是告诉运行环境(比如Cloudflare Workers这类平台):“我还有异步任务要处理,别着急销毁进程”——它是用来处理响应发送后的后续操作(比如日志、资源清理)的,不是用来包裹响应逻辑的。
你现在把respondWith放在waitUntil里面,相当于没有正确触发响应流程,运行环境无法识别你的响应,最终就会抛出ERR_CONNECTION_RESET错误。而直接返回字符串时,可能是因为写法巧合避开了这个嵌套问题,所以能正常返回。
修正后的代码
把respondWith从waitUntil里抽出来,代码就能正常工作了:
addEventListener('fetch', function(event) { const stream = new ReadableStream({ start(controller) { controller.enqueue('test'); controller.close(); } }); // 直接调用respondWith返回响应流 event.respondWith(new Response(stream, { headers: {'Content-Type': 'text/html; charset=utf-8'} })); // 如果有后续异步任务(比如日志上报),再单独用waitUntil // event.waitUntil(someAsyncCleanupTask()); });
额外说明
如果之后需要处理响应发送后的异步操作,直接在respondWith外面调用event.waitUntil即可,千万不要把它们嵌套起来。这样既保证了响应正常返回,也能完成后续的异步任务。
内容的提问来源于stack exchange,提问作者rubixibuc
相关产品推荐
相关产品推荐

