@@ -18,6 +18,7 @@ let warned = Object.create(null)
18
18
const warnOnce = msg => {
19
19
if ( ! warned [ msg ] ) {
20
20
warned [ msg ] = true
21
+ // eslint-disable-next-line no-console
21
22
console . warn ( `\n\u001b[31m${ msg } \u001b[39m\n` )
22
23
}
23
24
}
@@ -48,6 +49,21 @@ const normalizeRender = vm => {
48
49
}
49
50
}
50
51
52
+ function waitForSsrPrefetch ( vm , resolve , reject ) {
53
+ if ( isDef ( vm . $options . ssrPrefetch ) ) {
54
+ try {
55
+ const result = vm . $options . ssrPrefetch . call ( vm , vm )
56
+ if ( result && typeof result . then === 'function' ) {
57
+ result . then ( resolve ) . catch ( reject )
58
+ return
59
+ }
60
+ } catch ( e ) {
61
+ reject ( e )
62
+ }
63
+ }
64
+ resolve ( )
65
+ }
66
+
51
67
function renderNode ( node , isRoot , context ) {
52
68
if ( node . isString ) {
53
69
renderStringNode ( node , context )
@@ -165,13 +181,20 @@ function renderComponentInner (node, isRoot, context) {
165
181
context . activeInstance
166
182
)
167
183
normalizeRender ( child )
168
- const childNode = child . _render ( )
169
- childNode . parent = node
170
- context . renderStates . push ( {
171
- type : 'Component' ,
172
- prevActive
173
- } )
174
- renderNode ( childNode , isRoot , context )
184
+
185
+ const resolve = ( ) => {
186
+ const childNode = child . _render ( )
187
+ childNode . parent = node
188
+ context . renderStates . push ( {
189
+ type : 'Component' ,
190
+ prevActive
191
+ } )
192
+ renderNode ( childNode , isRoot , context )
193
+ }
194
+
195
+ const reject = context . done
196
+
197
+ waitForSsrPrefetch ( child , resolve , reject )
175
198
}
176
199
177
200
function renderAsyncComponent ( node , isRoot , context ) {
@@ -391,6 +414,10 @@ export function createRenderFunction (
391
414
} )
392
415
installSSRHelpers ( component )
393
416
normalizeRender ( component )
394
- renderNode ( component . _render ( ) , true , context )
417
+
418
+ const resolve = ( ) => {
419
+ renderNode ( component . _render ( ) , true , context )
420
+ }
421
+ waitForSsrPrefetch ( component , resolve , done )
395
422
}
396
423
}
0 commit comments