daiwei пре 1 година
родитељ
комит
aea4c6e1dd

+ 4 - 3
packages/runtime-core/src/hydrationStrategies.ts

@@ -18,7 +18,7 @@ const cancelIdleCallback: Window['cancelIdleCallback'] =
  *          listeners.
  */
 export type HydrationStrategy = (
-  hydrate: () => void,
+  hydrate: () => void | Promise<any>,
   forEachElement: (cb: (el: Element) => any) => void,
 ) => (() => void) | void
 
@@ -86,11 +86,12 @@ export const hydrateOnInteraction: HydrationStrategyFactory<
   (hydrate, forEach) => {
     if (isString(interactions)) interactions = [interactions]
     let hasHydrated = false
-    const doHydrate = (e: Event) => {
+    const doHydrate = async (e: Event) => {
       if (!hasHydrated) {
         hasHydrated = true
         teardown()
-        hydrate()
+        // eslint-disable-next-line no-restricted-syntax
+        await hydrate()
         // replay event
         e.target!.dispatchEvent(new (e.constructor as any)(e.type, e))
       }

+ 0 - 4
packages/vue/__tests__/e2e/hydration-strat-idle.html

@@ -28,12 +28,8 @@
     loader: () =>
       new Promise(resolve => {
         setTimeout(() => {
-          debugger
           console.log('resolve')
           resolve(Comp)
-          requestIdleCallback(() => {
-            console.log('busy')
-          })
         }, 10)
       }),
     hydrate: hydrateOnIdle(),

+ 2 - 2
packages/vue/__tests__/e2e/hydrationStrategies.spec.ts

@@ -31,8 +31,8 @@ describe('async component hydration strategies', () => {
     expect(await page().evaluate(() => window.isHydrated)).toBe(false)
     // wait for hydration
     await page().waitForFunction(() => window.isHydrated)
-    // assert message order: hyration should happen after already queued main thread work
-    expect(messages.slice(1)).toMatchObject(['resolve', 'busy', 'hydrated'])
+    // assert message order
+    expect(messages.slice(1)).toMatchObject(['resolve', 'hydrated'])
     await assertHydrationSuccess()
   })