You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:24:56