@@ -56,50 +56,28 @@ export default function withAsyncComponents(app : React$Element) : Promise<Resul
5656 } )
5757 }
5858
59- const doWalk = ( el , ctx = { } , fetchRoot = false ) => {
60- const resolvers = [ ]
59+ const visitor = ( element , instance , context ) => {
60+ if ( instance && typeof instance . getAsyncComponentData === 'function' ) {
61+ const { id, ssrMode, getResolver } = instance . getAsyncComponentData ( )
6162
62- const visitor = ( element , instance , context ) => {
63- const skipRoot = ! fetchRoot && ( element === el )
64- if ( instance
65- && typeof instance . getAsyncComponentData === 'function'
66- && ! skipRoot
67- ) {
68- const { id, defer, getResolver } = instance . getAsyncComponentData ( )
63+ const isBoundary = context . asyncComponentsAncestor &&
64+ context . asyncComponentsAncestor . isBoundary
6965
70- if ( rehydrateState ) {
71- if ( ! rehydrateState . resolved [ id ] ) {
72- return false
73- }
74- rehydrateState [ id ] = false
75- } else if ( defer ) {
76- // Deferred, so return false to stop walking down this branch.
66+ if ( rehydrateState != null ) {
67+ if ( ! rehydrateState . resolved [ id ] ) {
7768 return false
7869 }
79-
80- const resolver = getResolver ( )
81- resolvers . push ( {
82- resolver,
83- element,
84- context : Object . assign ( context , { ASYNC_WALKER_BOUNDARY : true } ) ,
85- } )
70+ rehydrateState [ id ] = false
71+ } else if ( ssrMode === 'defer' || isBoundary ) {
72+ // Deferred, so return false to stop walking down this branch.
8673 return false
8774 }
88- return undefined
75+ return getResolver ( )
8976 }
90-
91- reactTreeWalker ( el , visitor , ctx )
92-
93- const nestedPromises = resolvers . map ( ( { resolver, element, context } ) =>
94- resolver . then ( ( ) => doWalk ( element , context ) ) ,
95- )
96-
97- return nestedPromises . length > 0
98- ? Promise . all ( nestedPromises )
99- : Promise . resolve ( [ ] )
77+ return true
10078 }
10179
102- return doWalk ( appWithAsyncComponents , { } , true )
80+ return reactTreeWalker ( appWithAsyncComponents , visitor , { } )
10381 // Swallow errors.
10482 . catch ( ( ) => undefined )
10583 // Ensure that state rehydration is killed
0 commit comments