From 697968c0afa928406509826402ada913d299c460 Mon Sep 17 00:00:00 2001 From: Janka Uryga Date: Wed, 19 Nov 2025 17:40:52 +0100 Subject: [PATCH] let fizz flush microtasks before flowing --- .../server/stream-utils/node-web-streams-helper.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/next/src/server/stream-utils/node-web-streams-helper.ts b/packages/next/src/server/stream-utils/node-web-streams-helper.ts index b69f5223367757..0df3d16cd26b83 100644 --- a/packages/next/src/server/stream-utils/node-web-streams-helper.ts +++ b/packages/next/src/server/stream-utils/node-web-streams-helper.ts @@ -2,7 +2,11 @@ import type { ReactDOMServerReadableStream } from 'react-dom/server' import { getTracer } from '../lib/trace/tracer' import { AppRenderSpan } from '../lib/trace/constants' import { DetachedPromise } from '../../lib/detached-promise' -import { scheduleImmediate, atLeastOneTask } from '../../lib/scheduler' +import { + scheduleImmediate, + atLeastOneTask, + waitAtLeastOneReactRenderTask, +} from '../../lib/scheduler' import { ENCODED_TAGS } from './encoded-tags' import { indexOfUint8Array, @@ -797,9 +801,13 @@ export async function continueFizzStream( // Suffix itself might contain close tags at the end, so we need to split it. const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null - // If we're generating static HTML we need to wait for it to resolve before continuing. if (isStaticGeneration) { + // If we're generating static HTML we need to wait for it to resolve before continuing. await renderStream.allReady + } else { + // Otherwise, we want to make sure Fizz is done with all microtasky work + // before we start pulling the stream and cause a flush. + await waitAtLeastOneReactRenderTask() } return chainTransformers(renderStream, [