@@ -34,6 +34,25 @@ const EMPTY_STR = '';
3434const BEGIN_SUSPENSE_DENOMINATOR = '<!--$s-->' ;
3535const END_SUSPENSE_DENOMINATOR = '<!--/$s-->' ;
3636
37+ /**
38+ * Wraps a render result with suspense boundary markers, handling all possible
39+ * return types from _renderToString: string, Array, or Promise.
40+ * @param {string | Array | Promise } result
41+ * @returns {string | Array | Promise }
42+ */
43+ function wrapWithSuspenseMarkers ( result ) {
44+ if ( typeof result === 'string' ) {
45+ return BEGIN_SUSPENSE_DENOMINATOR + result + END_SUSPENSE_DENOMINATOR ;
46+ } else if ( isArray ( result ) ) {
47+ result . unshift ( BEGIN_SUSPENSE_DENOMINATOR ) ;
48+ result . push ( END_SUSPENSE_DENOMINATOR ) ;
49+ return result ;
50+ } else if ( result && typeof result . then === 'function' ) {
51+ return result . then ( wrapWithSuspenseMarkers ) ;
52+ }
53+ return BEGIN_SUSPENSE_DENOMINATOR + result + END_SUSPENSE_DENOMINATOR ;
54+ }
55+
3756// Global state for the current render pass
3857let beforeDiff , afterDiff , renderHook , ummountHook ;
3958
@@ -498,18 +517,7 @@ function _renderToString(
498517 if ( options . unmount ) options . unmount ( vnode ) ;
499518
500519 if ( vnode . _suspended ) {
501- if ( typeof str === 'string' ) {
502- return BEGIN_SUSPENSE_DENOMINATOR + str + END_SUSPENSE_DENOMINATOR ;
503- } else if ( isArray ( str ) ) {
504- str . unshift ( BEGIN_SUSPENSE_DENOMINATOR ) ;
505- str . push ( END_SUSPENSE_DENOMINATOR ) ;
506- return str ;
507- }
508-
509- return str . then (
510- ( resolved ) =>
511- BEGIN_SUSPENSE_DENOMINATOR + resolved + END_SUSPENSE_DENOMINATOR
512- ) ;
520+ return wrapWithSuspenseMarkers ( str ) ;
513521 }
514522
515523 return str ;
@@ -556,9 +564,7 @@ function _renderToString(
556564 asyncMode ,
557565 renderer
558566 ) ;
559- return vnode . _suspended
560- ? BEGIN_SUSPENSE_DENOMINATOR + result + END_SUSPENSE_DENOMINATOR
561- : result ;
567+ return vnode . _suspended ? wrapWithSuspenseMarkers ( result ) : result ;
562568 } catch ( e ) {
563569 if ( ! e || typeof e . then != 'function' ) throw e ;
564570
0 commit comments