diff --git a/.changeset/spicy-lies-look.md b/.changeset/spicy-lies-look.md new file mode 100644 index 00000000000..13b6597023f --- /dev/null +++ b/.changeset/spicy-lies-look.md @@ -0,0 +1,6 @@ +--- +'@modern-js/server-core': patch +--- + +fix: redablestream should not be locked, when stream transfer +fix: redablestream 不应该被锁住当 stream 传输时 diff --git a/packages/server/core/src/base/middlewares/renderHandler/ssrCache.ts b/packages/server/core/src/base/middlewares/renderHandler/ssrCache.ts index 5cebadd2f00..46c81e1e8f7 100644 --- a/packages/server/core/src/base/middlewares/renderHandler/ssrCache.ts +++ b/packages/server/core/src/base/middlewares/renderHandler/ssrCache.ts @@ -106,16 +106,29 @@ export class CacheManager { return chunk; }); - stream.readable.getReader().closed.then(() => { - const current = Date.now(); - const cache: CacheStruct = { - val: html, - cursor: current, - }; - this.container.set(key, JSON.stringify(cache), { ttl }); - }); - body.pipeThrough(stream); + const reader = body.getReader(); + const writer = stream.writable.getWriter(); + + const push = () => { + reader.read().then(({ done, value }) => { + if (done) { + const current = Date.now(); + const cache: CacheStruct = { + val: html, + cursor: current, + }; + this.container.set(key, JSON.stringify(cache), { ttl }); + writer.close(); + return; + } + + writer.write(value); + push(); + }); + }; + + push(); return { data: stream.readable,